Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在excel VBA中控制多页中的按钮_Excel_Vba_Multipage_Commandbutton - Fatal编程技术网

如何在excel VBA中控制多页中的按钮

如何在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

我有一个多页,我成功地将第一页(我的参考页)的元素复制到动态创建的新页

我的问题是,如何在多页控件的页面内设置commandbutton的操作? 我的目标是点击任何页面上的按钮,然后弹出另一个表单

我该怎么做? 从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
这就是它的样子。


该按钮将连接页面内的所有字符串。连接的字符串将显示在另一个用户窗体上。

您最好在功能区中创建一个按钮,以便它在所有页面上都可用:

编辑:

糟糕的是,我以为你指的是工作表,而不是用户表单中的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:太好了!让我知道进展如何!我试过你的建议,但没用。我在我的问题上添加了图片和一段代码片段,以澄清所有问题。