如何控制excel VBA中的多页面内的button

我有一个多页,我成功地将第一页的元素作为我的参考页复制到dynamic创build的新页面。

我的问题是,如何在多页面控件的页面内设置一个commandbutton的动作? 我的目标是点击任何页面上的button,然后popup另一个表单。

我该怎么做呢? 从Android调整到VB是相当困难的。 我非常感谢你们的帮助。

这是我在克隆页面的代码。

i = 0 MultiPage1.Pages.Add MultiPage1.Pages(i).Controls.Copy i = i + 1 MultiPage1.Pages(i).Paste For Each ctl In Me.MultiPage1.Pages(i).Controls If TypeOf ctl Is MSForms.Label Then '~~~ code omitted Select Case ctl.Tag Case "startTime" ctl.Caption = "4:00pm" End Select End If Next 

这就是它的样子。 在这里输入图像说明

该button将连接页面内的所有string。 串联的string将显示在另一个用户窗体上。

您可能最好在function区中创build一个button,以便在所有页面上都可用:

http://chandoo.org/wp/2012/02/27/how-to-add-your-own-macros-to-excel-ribbon/

编辑:

我的不好,我以为你的意思是一个工作表,而不是一个用户表单中的VBA MultiPage。

看一下这个。 我能够为我做这个工作:

将代码分配给dynamic创build的button

1类:

 Option Explicit Public WithEvents CmdEvents As MSForms.CommandButton Private Sub CmdEvents_Click() MsgBox "yo" End Sub 

具有MultiPage对象的用户窗体:

 Option Explicit Dim cmdArray() As New Class1 Private Sub CommandButton1_Click() Dim newControl As Control Set newControl = Me.MultiPage1.Pages(0).Controls.Add("Forms.CommandButton.1", "NewCommand", True) newControl.Object.Caption = "hello" newControl.Left = 50 newControl.Top = 50 ReDim Preserve cmdArray(1 To 1) Set cmdArray(1).CmdEvents = newControl Set newControl = Nothing End Sub 

你可以用一个自定义类来做到这一点。 这个类基本上有一个成员Public WithEvents b as CommandButton

诀窍是WithEvents关键字。 您现在可以插入一些代码来统一处理分配给此类的button的点击:

 Private Sub b_Click() MsgBox "You clicked " & b.Name 'Modify this event so that different code is executed base on the page/name/etc. End Sub 

为了使这个工作,您需要将您在代码中创build的button分配给这个新类的对象:

 Private objButtonHandler as New MyClass 'this should be scope a UserForm wide Sub YourSub Dim objYourButton as CommandButton Set objYourButton = ... `your code here Set objButtonHandler.b = objYourButton End Sub