【问题标题】:How do you control a button inside a multipage in excel VBA如何在 excel VBA 中控制多页内的按钮
【发布时间】:2013-03-04 00:42:16
【问题描述】:

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

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

我该怎么做? 从 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

这就是它的外观。

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

【问题讨论】:

    标签: excel vba multipage commandbutton


    【解决方案1】:

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

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

    编辑:

    我的错,我以为您的意思是用户表单中的工作表而不是 VBA 多页。

    看看这个。我能够为我完成这项工作:

    Assign code to a button created dynamically

    第一类:

    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
    

    【讨论】:

    • 谢谢你的回答约瑟夫。我也在考虑这种方式,因为它更容易,但是,我提出这个问题是有原因的。我想知道是否有办法做到这一点。如果页面内的按钮与其他页面上的按钮不同怎么办。你将如何解决?这就是我提出这个问题的原因。
    • 啊,我明白了。它过去容易得多,我还没有机会真正考虑自定义功能区。但是,我发现有一个非常好的资源可供您查看:rondebruin.nl/ribbon.htm - 查看示例工作簿。当我有时间检查时,我会回到这个。
    • 谢谢约瑟夫。我真的很感谢你的建议。如果一切都失败了,那么我的选择将是丝带。
    • @JovanniG 确定。我误解了你的要求。当您说页面时,我以为您的意思是工作表。我看到您正在使用带有 MultiPage 控件的用户窗体。我会相应地调整我的答案。
    • 老兄,它奏效了。我想如果我创建按钮和标签而不是从第一页复制它们会好得多。非常感谢伙计。你摇滚。
    【解决方案2】:

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

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

    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
    

    【讨论】:

    • 感谢您的回复彼得,我不知道在“`your code here”上放什么。这些按钮是参考页面的克隆,即多页上的 Page(0)。页面及其内容是动态创建的。如果你愿意,我可以在这里发布我的代码。
    • @JovanniG:你如何克隆页面?也许您可以通过以下方式访问按钮:Set objYourButton = MyMultipage.Pages(MyMultipage.Pages.Count).Controls(1) 您可能需要将 1 替换为按钮的编号...
    • 我明白了。现在我懂了。我会试试这个。非常感谢。
    • @JovanniG:太好了!告诉我进展如何!
    • 我试过你的建议,但没有奏效。我在我的问题上添加了图片和一个代码 sn-p 以澄清所有内容。
    猜你喜欢
    • 2014-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多