【问题标题】:Generating button to call macro, but not running macro生成按钮调用宏,但不运行宏
【发布时间】:2018-03-20 13:03:20
【问题描述】:

在这里使用别人的代码,之前的代码会生成一个名为“Test”的工作表。下面的代码是我从另一篇文章中找到的,并对其进行了调整。目的是创建一个粘贴在“测试”表上的按钮,并在生成“测试”表后调用宏“邮件”。

问题是当前代码确实在正确的位置生成了一个按钮,但是一旦单击该按钮,它就什么也不做/不运行 Mail() 子程序。

Dim Obj As Object
Dim cmod
Dim Code As String

With ThisWorkbook.Worksheets("Test")

Set Obj = .OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
                               Link:=False, DisplayAsIcon:=False, Left:=435, _
                               Top:=106.5, Width:=89.25, Height:=38.25)

        Obj.Name = "ButtonTest" 
        Obj.Object.Caption = "Email Workbook"
        Obj.Object.OnAction = "ButtonTest_Click" 

        Code = "Sub ButtonTest_Click()" & vbCrLf & _
                "Call Mail" & vbCrLf & _
                "End Sub"

        With .Parent.VBProject.VBComponents(.CodeName).CodeModule
            .insertlines .CountOfLines + 1, Code
        End With
    End With

【问题讨论】:

  • Obj.Object.OnAction = "Mail()"(或者可能是="Mail")。你不需要为对象的_Click事件分配一个事件过程(ButtonTest_Click()),所以我认为你可以摆脱Code = ...之后的所有代码。
  • Obj.Object.OnAction = "ButtonTest_Click"放在代码插入之后,这样代码在尝试链接之前就已经存在了。
  • 如果OnAction 直接调用Mail 过程@ScottCraner 则不需要?
  • 我同意 @DavidZemens 只是想为可能不会指向现有代码的未来观众提供选项。
  • @s31,“邮件”在哪里?如果不在模块中,那么您可能需要使用工作表位置进行处理:stackoverflow.com/questions/14572989/…

标签: vba excel


【解决方案1】:

我无法让您的代码在 Excel 2016 中运行,尝试添加按钮时出现一些不可调试的错误。试试这个类似的代码,而不是:

Sub foo()
Dim Obj As Object
With ThisWorkbook.Worksheets("Test")
        Set Obj = .Buttons.Add(Left:=435, Top:=106.5, Width:=89.25, Height:=38.25)
        Obj.Name = "ButtonTest"
        Obj.Caption = "Email Workbook"
        Obj.OnAction = "Email_Template.Mail"
    End With
End Sub

以上假设Email_Template 是一个代码模块ThisWorkbook 相同的工作簿中。

【讨论】:

  • 太棒了。谢谢!仍然不知道为什么那个人会以如此多种方式行事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-05
相关资源
最近更新 更多