gpt4 book ai didi

events - 如何使用 VBA 将事件添加到运行时在 Excel 中创建的控件

转载 作者:行者123 更新时间:2023-12-03 14:38:20 24 4
gpt4 key购买 nike

我想在运行时使用 VBA 在 Excel 中添加控件和关联事件,但我不知道如何添加事件。

我尝试了下面的代码,并且在我的用户表单中正确创建了 Button,但是应该显示 hello 消息的关联点击事件不起作用。

欢迎任何建议/更正。

Dim Butn As CommandButton
Set Butn = UserForm1.Controls.Add("Forms.CommandButton.1")
With Butn
.Name = "CommandButton1"
.Caption = "Click me to get the Hello Message"
.Width = 100
.Top = 10
End With

With ThisWorkbook.VBProject.VBComponents("UserForm1.CommandButton1").CodeModule
Line = .CountOfLines
.InsertLines Line + 1, "Sub CommandButton1_Click()"
.InsertLines Line + 2, "MsgBox ""Hello!"""
.InsertLines Line + 3, "End Sub"
End With
UserForm1.Show

最佳答案

在运行时添加按钮然后添加事件的代码真的很简单,很难找到。我可以这么说是因为我在这种困惑上花费了更多的时间,并且比我编程过的任何其他事情都更加恼火。
创建一个用户窗体并输入以下代码:

Option Explicit


Dim ButArray() As New Class2

Private Sub UserForm_Initialize()
Dim ctlbut As MSForms.CommandButton

Dim butTop As Long, i As Long

'~~> Decide on the .Top for the 1st TextBox
butTop = 30

For i = 1 To 10
Set ctlbut = Me.Controls.Add("Forms.CommandButton.1", "butTest" & i)

'~~> Define the TextBox .Top and the .Left property here
ctlbut.Top = butTop: ctlbut.Left = 50
ctlbut.Caption = Cells(i, 7).Value
'~~> Increment the .Top for the next TextBox
butTop = butTop + 20

ReDim Preserve ButArray(1 To i)
Set ButArray(i).butEvents = ctlbut
Next
End Sub

现在您需要在项目代码中添加一个类模块。请记住它是类模块,而不是标准模块。
对象 butEvents是被点击的按钮。
输入以下简单代码(在我的例子中,类名是 Class2)。
Public WithEvents butEvents As MSForms.CommandButton

Private Sub butEvents_click()

MsgBox "Hi Shrey from " & butEvents.Caption

End Sub

就是这样。现在运行它!

关于events - 如何使用 VBA 将事件添加到运行时在 Excel 中创建的控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3014421/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com