首页 > 解决方案 > 单击插入按钮时分配给插入按钮的宏不运行

问题描述

我使用以下 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

这一切都完美无缺。


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

Sub Insert_Values()
Sheet1.Range("A1").Value = 200
End Sub

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

This macro may not be available in this workbook or all macros may be disabled

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

.OnAction = ActiveSheet.Name & ".Insert_Values"
.OnAction ="ThisWorkbook.Insert_Values"

但是,我无法让它工作。
我需要在我的代码中更改什么以便分配的宏运行没有任何问题?

标签: excelvba

解决方案


它在“ThisWorkbook”中定义

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

ThisWorkbook是一个对象:没有限定符就不能调用它的公共成员。通过将代码移动到标准模块,公共过程在任何地方都可以访问而无需限定符。

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

Book1!ThisWorkbook.Test

所以,你很接近!假设不涉及空格,这应该有效:

.OnAction = ThisWorkbook.Name & "!ThisWorkbook.Insert_Values"

如果ThisWorkbook.Name有空格,您需要将其括在单引号中(未经测试):

.OnAction = "'" & ThisWorkbook.Name & "'!ThisWorkbook.Insert_Values"

推荐阅读