在 Excel Sheet 多页表单(不是 VBA 多页)上检测按钮按下事件

Detect Button Press Event on an Excel Sheet MultiPage Form (NOT a VBA MultiPage)

我正在努力弄清楚如何检测直接驻留在 Excel sheet 上的多页表单上的按钮按下事件。换句话说,表单不是使用 VBA 生成的,它是直接在 sheet.

上构建的

我希望语法类似于:

Private Sub MultiPage1_Frame1_CommandButton1_Click()
    Do Stuff
End Sub

但是,这不起作用,因为我想我还需要在 MultiPage 中指定页面。例如,可以通过以下方式访问同一表单上的文本框:

MultiPage1.Pages(0).Frame1.TextBox1.Text = "Some Text"

不幸的是,

Private Sub MultiPage1_Pages(0)_Frame1_CommandButton1_Click()

给出编译错误:预期:选择了内部零 (0) 的标识符。

那么,我该如何转换

MultiPage1.Pages(0).Frame1.CommandButton1 

到将检测按钮按下事件的子名称?

谢谢!

我不确定,但我认为您可能偶然发现了一个错误。

更多控件 下有一个 Microsoft Forms 2.0 控件,但我很确定它仅适用于 UserForms。

我尝试将其添加到工作表中,但出现错误。但是,一旦我将一个添加到 UserForm 并返回到工作表,我就可以添加它了……但是一时变得 "glitchy",当我打开 bod 的“属性”对话框时,字体是渲染不佳。

我查看的所有文档(如 this, this and this)只有在用户窗体或 Outlook 中使用它的示例。

ActiveX 控件种类繁多,并不是所有的控件都能随处使用。作为 Excel 中的经验法则,最好坚持使用内置控件。

另外,来自另一个论坛:

Q: It seems that I could not find and add Multipage control into worksheet. How to add a Multipage control to Excel worksheet?

A: Unless you put it on a UserForm first, you can't display it on a Worksheet. The UserForm provides the user interface to VBA. The MultiPagecontrol is designed to work with this user interface, and not the Excel Worksheet. Is there a problem using the UserForm to display the MutliPage control? Source: Leith Ross

综合这些证据告诉我,即使你可以让它工作, 你也不应该。无法预测它将如何表现。


如果您决定在用户​​窗体上使用多页,请注意在上面的示例中,MultiPage1 控件的名称;那不是指 "page 1"。控件 作为一个整体 有一个不特定于页面的 Click 事件:

Private Sub MultiPage1_Click(ByVal Index As Long)

为了完整起见,我将粘贴一个完整的代码示例,但再次声明:对于基于工作表的控件,不推荐

如何:访问多页控件中的页面

以下示例以多种方式访问​​ MultiPage 的单个页面:

  • 使用带有数字索引的页面集合。

  • 在 MultiPage 中使用单个页面的名称。

  • 使用 SelectedItem 属性.

要使用此示例,请将此示例代码复制到 表单脚本编辑器。确保 form 包含一个名为 MultiPage1MultiPage 和一个名为 CommandButton 15=].

Sub CommandButton1_Click()
    Dim PageName
    Set MultiPage1 = Item.GetInspector.ModifiedFormPages("P.2").MultiPage1

    For i = 0 To MultiPage1.Count - 1
        'Use index (numeric or string)
        MsgBox "MultiPage1.Pages(i).Caption = " & MultiPage1.Pages(i).Caption
        MsgBox "MultiPage1.Pages.Item(i).Caption = " & _
            MultiPage1.Pages.Item(i).Caption

        'Use Page object without referring to Pages collection
        If i = 0 Then
            MsgBox "MultiPage1.Page1.Caption = " & MultiPage1.Page1.Caption
        ElseIf i = 1 Then
            MsgBox "MultiPage1.Page2.Caption = " & MultiPage1.Page2.Caption
        End If

        'Use SelectedItem Property
        MultiPage1.Value = i
        MsgBox "MultiPage1.SelectedItem.Caption = " & _
            MultiPage1.SelectedItem.Caption
    Next
End Sub

(Source)


现在我要删除那个有问题的工作表并重启;我建议你也这样做!

Mikerickson 和 Jaafar Tribak 在 MrExcel.com 上发现:

https://www.mrexcel.com/forum/excel-questions/1054446-detect-button-press-event-excel-sheet-multipage-form-not-vba-userform-multipage-2.html

非常感谢他们!