带参数分配宏的语法(按钮)

时间:2019-06-28 07:22:53

标签: excel vba syntax arguments

我在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]如果我将“分配宏”框中的语法替换为之前的内容,它将起作用...!正如我所说,它们以前都可以正常工作...什么都没改变...

[编辑]结果显示在这里:

有效代码与无效代码的图像。我相信当我粘贴并改写了'不工作'的代码时,它在一开始就添加了对工作簿的引用,并用单引号引起来”。还是不知道为什么它坏了/解决了。

Erroring code to left, working code to right

1 个答案:

答案 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

我还更改了代码,您不需要遍历每个工作表,您知道要检查的工作表,因此仅使用其名称即可。