如何在excel VBA中控制多页中的按钮
我有一个多页,我成功地将第一页(我的参考页)的元素复制到动态创建的新页 我的问题是,如何在多页控件的页面内设置commandbutton的操作? 我的目标是点击任何页面上的按钮,然后弹出另一个表单 我该怎么做? 从Android到VB很难调整。我真的很感谢你们的帮助 这是我在克隆页面中的代码如何在excel VBA中控制多页中的按钮,excel,vba,multipage,commandbutton,Excel,Vba,Multipage,Commandbutton,我有一个多页,我成功地将第一页(我的参考页)的元素复制到动态创建的新页 我的问题是,如何在多页控件的页面内设置commandbutton的操作? 我的目标是点击任何页面上的按钮,然后弹出另一个表单 我该怎么做? 从Android到VB很难调整。我真的很感谢你们的帮助 这是我在克隆页面中的代码 i = 0 MultiPage1.Pages.Add MultiPage1.Pages(i).Controls.Copy i = i + 1 MultiPage1.Pages(i).Paste For Ea
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
这就是它的样子。
该按钮将连接页面内的所有字符串。连接的字符串将显示在另一个用户窗体上。您最好在功能区中创建一个按钮,以便它在所有页面上都可用: 编辑: 糟糕的是,我以为你指的是工作表,而不是用户表单中的VBA多页 看看这个。我能为自己做这件事: 类别1:
Option Explicit
Public WithEvents CmdEvents As MSForms.CommandButton
Private Sub CmdEvents_Click()
MsgBox "yo"
End Sub
具有多页对象的Userform:
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,其中事件b作为CommandButton
诀窍是with events
关键字。现在,您可以插入一些代码来处理分配给此类的按钮的单击:
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
为了实现这一点,您需要将在代码中创建的按钮分配给这个新类的对象:
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
谢谢你的回答,约瑟夫。我也在考虑这样做,因为这样比较容易,但是,我提出这个问题是有原因的。我想知道是否有办法做到这一点。如果一个页面中的按钮与另一个页面上的按钮不同,该怎么办。你将如何解决它?这就是我提出这个问题的原因。啊,我明白了。它过去容易得多,我还没有机会真正考虑定制丝带。但是,我发现有一个非常好的资源,您可以查看:-查看示例工作簿。等我有时间再看一遍,谢谢约瑟夫。我真的很感激你的建议。如果其他一切都失败了,那么我的选择将是缎带。@JovanniG当然。我误解了你的要求。当你说页面时,我以为你指的是工作表。我看到您正在使用带有多页控件的userform。我会相应地调整我的答案。伙计,它成功了。我想如果我创建按钮和标签比从第一页复制它们要好得多。谢谢你,伙计。你太棒了。谢谢你的回答,彼得,我不知怎么搞不懂该在“`你的代码在这里'上写什么。这些按钮是参考页的克隆,参考页是多页上的第(0)页。页面及其内容都是动态创建的。如果你愿意,我可以在这里发布我的代码。@JovanniG:你如何克隆页面?也许您可以使用如下方式访问按钮:
Set objYourButton=MyMultipage.Pages(MyMultipage.Pages.Count)。控件(1)
您可能需要将1
替换为按钮的编号……我明白了。现在我明白了。我要试试这个。非常感谢。@JovanniG:太好了!让我知道进展如何!我试过你的建议,但没用。我在我的问题上添加了图片和一段代码片段,以澄清所有问题。