首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActiveSheet与WorkSheet

ActiveSheet与WorkSheet
EN

Stack Overflow用户
提问于 2014-07-14 22:54:41
回答 1查看 2.1K关注 0票数 2

我正在使用Mac2011的Excel,并且我在一个工作表中有几个复选框。我试着用下面的代码使它们自动化:

代码语言:javascript
复制
Private Sub CheckBox12_Click()
    Dim ws As Worksheet
    Set ws = ActiveSheet
    With ws
        If .Shapes("CheckBox12").OLEFormat.Object.Value = xlOn Then
           .Range("CK1").EntireColumn.Hidden = False
       Else
           .Range("CK1").EntireColumn.Hidden = True
       End If
   End With
End Sub

此代码显示错误:运行时错误445对象不支持此操作。

但是,如果删除ws并执行以下操作

代码语言:javascript
复制
Private Sub CheckBox12_Click()
    With ActiveSheet
         If .Shapes("CheckBox12").OLEFormat.Object.Value = xlOn Then
            .Range("CK1").EntireColumn.Hidden = False
         Else
            .Range("CK1").EntireColumn.Hidden = True
        End If
    End With
End Sub

这个很好用。

这是怎么回事?我知道我可以只使用ActiveSheet,但我总是喜欢首先设置它= ws,因为它在我编写代码时给出了属性/方法的下拉列表。

EN

回答 1

Stack Overflow用户

发布于 2014-07-15 22:54:44

我认为你得到的是编译器错误,而不是运行时错误。

我怀疑ActiveSheet工作的原因是因为编译器不检查它。另一方面,ws不能工作,因为编译器正在尝试解析它,并且实际上有一个false标志。所以编译器检查器有一个错误。它正在标记一个实际上不应该是错误的错误。

Object doesn't support this action (Error 445)

编辑:也试一下,让我知道它是否有效:

代码语言:javascript
复制
Dim ws As Object
Set ws = ActiveSheet
With ws
    ...

同样值得注意的是,ActiveSheetWorksheet不是一回事。ActiveSheet还可以包含ChartSheet;但ChartSheet永远不能是工作表。因此,With wsWith ActiveSheet之间存在差异可能并不奇怪。

你应该尝试的另一件事是将你的对象设置为一个变量:

代码语言:javascript
复制
Dim ws As Worksheet
Set ws = ActiveSheet
Dim chk As Object
With ws
    Set chk = .Shapes("CheckBox12").OLEFormat.Object
    If chk.Value = xlOn Then
        .Range("CK1").EntireColumn.Hidden = False
    Else
        .Range("CK1").EntireColumn.Hidden = True
    End If
End With

这可能会从方程中删除ws变量。当然,使用dim作为正确的对象会比使用通用的as Object更好,但我不确定它会是什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24739448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档