单击插入按钮时,分配给插入按钮的宏不运行

Mic*_*chi 1 excel vba

我使用以下VBA插入按钮:

Sub Insert_Button()
    Dim Button_01 As Button
    Set Button_01 = Sheet1.Buttons.Add(423.75, 0, 48, 15)
    Set Range_Button_01 = Sheet1.Range("B1:C5")
    Button_01.Name = "Button_01"
    With Button_01
    .Top = Range_Button_01.Top
    .Left = Range_Button_01.Left
    .Width = Range_Button_01.Width
    .Height = Range_Button_01.Height
    .Text = "Button_01"
    .OnAction = "Insert_Values"
    End With
End Sub
Run Code Online (Sandbox Code Playgroud)

所有这些完美地工作。


如您所见,我已经.onAction为按钮分配了VBA :

Sub Insert_Values()
Sheet1.Range("A1").Value = 200
End Sub
Run Code Online (Sandbox Code Playgroud)

插入按钮后,单击它,我收到以下错误消息:

This macro may not be available in this workbook or all macros may be disabled
Run Code Online (Sandbox Code Playgroud)

到目前为止,我试图.OnAction像这样更改属性:

.OnAction = ActiveSheet.Name & ".Insert_Values"
.OnAction ="ThisWorkbook.Insert_Values"
Run Code Online (Sandbox Code Playgroud)

但是,我无法使其工作。
我需要在代码中进行哪些更改,以便分配的宏运行没有任何问题?

Mat*_*don 5

它在“ ThisWorkbook”中定义

添加一个新的标准模块,将宏过程移到那里。

ThisWorkbook是一个对象:没有限定符就无法调用其公共成员。通过将代码移至标准模块,公共过程无需限定符即可在任何地方访问。

或者,您可以限定成员通话的资格。如果手动将宏分配给公共过程ThisWorkbook,然后输出形状的OnAction属性值,则会得到以下信息:

Book1!ThisWorkbook.Test
Run Code Online (Sandbox Code Playgroud)

所以,你很亲密!假设不涉及空格,这应该可以工作:

.OnAction = ThisWorkbook.Name & "!ThisWorkbook.Insert_Values"
Run Code Online (Sandbox Code Playgroud)

如果ThisWorkbook.Name有空格,则需要将其用单引号引起来(未经测试):

.OnAction = "'" & ThisWorkbook.Name & "'!ThisWorkbook.Insert_Values"
Run Code Online (Sandbox Code Playgroud)