我在Excel中创建了一个漂亮的按钮样式的对象。 我右键单击“分配宏”。 用来调用带有参数的宏的语法曾经是有效的:
'SubName "Argument"'
并且我的sub具有匹配的名称,并且期望将String变量类型作为其唯一参数。
我的具体示例如下:
Option Explicit
Sub UnhideTab(ByVal SheetName As String)
'MsgBox "Running UnhideTab " & SheetName
Dim Sheet As Worksheet
'Dim newshtname As String
For Each Sheet In Worksheets
If Sheet.Name = SheetName Then
If Sheet.Visible = True Then
Sheet.Copy After:=Sheet
Sheets("Client Info").Select
' MsgBox "What is this instance of " & SheetName & "called?", vbOKCancel, "Name New Sheet"
Else:
Sheet.Visible = True
End If
End If
Next Sheet
End Sub
对于该按钮,然后在“分配宏”框中输入例如:
'UnhideTab "Challenger"'
这将取消隐藏“挑战者”选项卡。完美工作了一年以上。 现在,由于最近几天,它不再起作用了。
错误消息似乎根本没有引起争论:
“对不起,我们找不到。它可能被移动,重命名或删除了吗?”
有人知道为什么吗?
[EDIT]如果我将“分配宏”框中的语法替换为之前的内容,它将起作用...!正如我所说,它们以前都可以正常工作...什么都没改变...
[编辑]结果显示在这里:
有效代码与无效代码的图像。我相信当我粘贴并改写了'不工作'的代码时,它在一开始就添加了对工作簿的引用,并用单引号引起来”。还是不知道为什么它坏了/解决了。
答案 0 :(得分:0)
您不能直接运行带有参数的过程,您需要编写另一个过程来调用UnhideTab
,如下所示:
Option Explicit
Sub UnhideTab(ByVal SheetName As String)
'MsgBox "Running UnhideTab " & SheetName
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets(SheetName)
'Dim newshtname As String
With ws
If .Visible = True Then
.Copy After:=ws
ThisWorkbook.Sheets("Client Info").Select
' MsgBox "What is this instance of " & SheetName & "called?", vbOKCancel, "Name New Sheet"
Else
.Visible = True
End If
End With
End Sub
Sub Unhide()
UnhideTab "MySheet"
End Sub
我还更改了代码,您不需要遍历每个工作表,您知道要检查的工作表,因此仅使用其名称即可。