【发布时间】: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/…