子或函数未定义:按钮()

时间:2016-04-01 14:47:07

标签: vba excel-vba excel

我在另一个电子表格中有这个子,我可以点击按钮折叠并展开某些列。我将其复制到一个新的电子表格中以用于折叠某些行,但现在我收到错误“Sub或function not defined”。它突出显示Buttons

Sub HideDetails()
    Range("3:8").Select
    If Selection.EntireColumn.Hidden Then
        Selection.EntireColumn.Hidden = False
        Buttons("btnToggleDetails").Caption = "-"
    Else
        Selection.EntireColumn.Hidden = True
        Buttons("btnToggleDetails").Caption = "+"
        Range("A1").Select
        Application.CutCopyMode = False
    End If
    Range("A1").Select
    Application.CutCopyMode = False
End Sub

此工作簿中没有其他脚本。这个最初是在Module1中,但我尝试将其移动到一个新模块。

enter image description here

修改:我更改了代码中的按钮名称,但未更改屏幕截图。这两个引用现在都是btnToggleDetails但它仍然会引发相同的错误。

2 个答案:

答案 0 :(得分:1)

它告诉您在当前范围内找不到标识符Buttons()。如果Buttons()是您在其他地方声明的内容,则需要将其公开,或者您需要完全限定包含Buttons()对象的对象,例如:

  Sheet1.Buttons("btnToggleDetails").Caption = "+"

答案 1 :(得分:1)

不得不添加我的答案,因为我确信可以缩短代码行:

如果您认为Selection.EntireColumn.Hidden返回TRUE / FALSE或0 / -1 CHR(45)是减号 CHR(43)是一个加号。

ABS将-1变为1。

所以: 如果为TRUE(0)则45-(0 * 2)= 45
如果为假(-1)则45-(1 * 2)= 43

这会将列从隐藏状态交换为可见状态,反之亦然,并在即时窗口中显示正确的按钮标题:

Sub HideShowColumns()

    Selection.EntireColumn.Hidden = Not (Selection.EntireColumn.Hidden)
    Debug.Print Chr(45 - (Abs(CLng(Selection.EntireColumn.Hidden)) * 2))

End Sub

这应该适用于您的程序:

Sub HideDetails()

    Dim rng As Range
    Set rng = ActiveSheet.Range("3:8")

    rng.EntireColumn.Hidden = Not (rng.EntireColumn.Hidden)
    Buttons("btnToggleDetails").Caption = Chr(45 - (Abs(CLng(rng.EntireColumn.Hidden)) * 2))

End Sub