我在另一个电子表格中有这个子,我可以点击按钮折叠并展开某些列。我将其复制到一个新的电子表格中以用于折叠某些行,但现在我收到错误“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中,但我尝试将其移动到一个新模块。
修改:我更改了代码中的按钮名称,但未更改屏幕截图。这两个引用现在都是btnToggleDetails
但它仍然会引发相同的错误。
答案 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