我正在努力弄清楚如何在直接位于Excel工作表上的MultiPage表单上检测按钮按下事件。换句话说,表单不是使用VBA生成的,而是直接在工作表上构建。
我希望语法类似于:
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
到将检测按钮按下事件的子名称?
谢谢!
答案 0 :(得分:0)
我不确定,但我认为你可能偶然发现了一个错误。
More Controls 下有一个Microsoft Forms 2.0控件,但我很确定它只适用于UserForms。
我尝试将其添加到工作表中并收到错误消息。但是,一旦我将一个添加到UserForm并返回到工作表,我就可以添加它...但是事情有点“毛病”,当我打开bod的属性对话框时,字体渲染效果不佳。
我查看的所有文档(例如this,this和this)仅包含在UserForm或Outlook中使用的示例。
有许多类型的ActiveX控件,并非所有控件都可以在任何地方使用。作为Excel中的经验法则,最好坚持使用内置的控件。
另外,来自另一个论坛:
问:我似乎无法在工作表中找到并添加多页控件。 如何将多页控件添加到Excel工作表?
A :除非您首先将其放在UserForm上,否则无法在工作表上显示它。 UserForm为VBA提供用户界面。 MultiPagecontrol旨在使用此用户界面,而不是Excel工作表。使用UserForm显示MutliPage控件是否有问题? 来源:Leith Ross
这个证据合起来告诉我,即使你可以让它工作, 你也不应该。没有预测它会如何表现。
如果您决定在UserForm上使用MultiPage,请注意,在上面的示例中,MultiPage1
是控件的名称;那并不是指“第1页”。控件作为一个整体有一个Click
事件,该事件并非特定于页面:
Private Sub MultiPage1_Click(ByVal Index As Long)
为了完整起见,我将粘贴一个完整的代码示例,但是再次:对于基于工作表的控件,这是不推荐。
以下示例以多种方式访问 MultiPage 的单个页面:
将Pages集合与数字索引一起使用。
使用MultiPage中单个页面的名称。
使用SelectedItem属性。
要使用此示例,请将此示例代码复制到表单的脚本编辑器。确保表单包含名为MultiPage1
的 MultiPage 和名为CommandButton1
的 CommandButton 。
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)
现在我要删除那个错误的工作表并 重新启动 ;我建议你这样做!
答案 1 :(得分:0)
MrExcel.com上的Mikerickson和Jaafar Tribak发现了这一点:
非常感谢他们两人!