Excel VBA: 如何访问和控制 "Sheet Select" 对话框?
Excel VBA: how to access and control the "Sheet Select" dialog?
当我的 VBA 脚本无法确定要使用哪个工作表时,它会打开一个 Excel 对话框:"Select Sheet"。这是太棒了!我如何以编程方式控制和使用 "Sheet Select" 对话框?
我正在编写使用
的代码
Application.FileDialog(msoFileDialogFilePicker)
..设置一个变量=一个选定的文件名,但我也在尝试为该文件中的某个工作表设置一个变量。无需打开文件。
我希望工作流程是:
- 文件对话框打开 -> Select 一个 Excel 文件 > 确定
- 工作表对话框打开(类似于 Excel 的 "Select Sheet" 对话框)-> Select 该 Excel 文件中的工作表之一 > 确定
我经历了 Application.Dialog(xl...) 的事情,但找不到正确的选择。
请帮忙!谢谢。
你可以试试这个(改编自 Tom Curtis 的 here)
Option Explicit
Dim mySht As Worksheet
Sub SelectSheet()
Dim cmdBar As CommandBar
Dim cmdBarBtn As CommandBarButton
Dim sht As Worksheet
RegDel
Set cmdBar = Application.CommandBars.Add("Register", msoBarPopup)
For Each sht In ThisWorkbook.Worksheets
Set cmdBarBtn = cmdBar.Controls.Add
cmdBarBtn.Caption = sht.Name
cmdBarBtn.Style = msoButtonCaption
cmdBarBtn.OnAction = "SelectThatSheet"
Next sht
cmdBar.ShowPopup
MsgBox "you selected sheet '" & mySht.Name & "'"
End Sub
Sub SelectThatSheet()
Set mySht = Worksheets(Application.Caller(1))
RegDel
End Sub
Sub RegDel()
On Error Resume Next
Application.CommandBars("Register").Delete
On Error GoTo 0
End Sub
当我的 VBA 脚本无法确定要使用哪个工作表时,它会打开一个 Excel 对话框:"Select Sheet"。这是太棒了!我如何以编程方式控制和使用 "Sheet Select" 对话框?
我正在编写使用
的代码Application.FileDialog(msoFileDialogFilePicker)
..设置一个变量=一个选定的文件名,但我也在尝试为该文件中的某个工作表设置一个变量。无需打开文件。
我希望工作流程是:
- 文件对话框打开 -> Select 一个 Excel 文件 > 确定
- 工作表对话框打开(类似于 Excel 的 "Select Sheet" 对话框)-> Select 该 Excel 文件中的工作表之一 > 确定
我经历了 Application.Dialog(xl...) 的事情,但找不到正确的选择。
请帮忙!谢谢。
你可以试试这个(改编自 Tom Curtis 的 here)
Option Explicit
Dim mySht As Worksheet
Sub SelectSheet()
Dim cmdBar As CommandBar
Dim cmdBarBtn As CommandBarButton
Dim sht As Worksheet
RegDel
Set cmdBar = Application.CommandBars.Add("Register", msoBarPopup)
For Each sht In ThisWorkbook.Worksheets
Set cmdBarBtn = cmdBar.Controls.Add
cmdBarBtn.Caption = sht.Name
cmdBarBtn.Style = msoButtonCaption
cmdBarBtn.OnAction = "SelectThatSheet"
Next sht
cmdBar.ShowPopup
MsgBox "you selected sheet '" & mySht.Name & "'"
End Sub
Sub SelectThatSheet()
Set mySht = Worksheets(Application.Caller(1))
RegDel
End Sub
Sub RegDel()
On Error Resume Next
Application.CommandBars("Register").Delete
On Error GoTo 0
End Sub