Excel VBA:如何访问和控制;“表格选择”;对话

Excel VBA:如何访问和控制;“表格选择”;对话,vba,excel,worksheet,Vba,Excel,Worksheet,当我的VBA脚本无法确定要使用哪个工作表时,它会打开一个Excel对话框:“选择工作表”。这太棒了!如何以编程方式控制和使用“工作表选择”对话框 我正在写一个代码,使用 Application.FileDialog(msoFileDialogFilePicker) ..设置变量=所选文件名,但我也尝试将变量设置为该文件中的某个工作表。没有打开文件的情况下 我希望工作流是: 打开文件对话框->选择Excel文件>确定 工作表对话框打开(如Excel的“选择工作表”对话框)->选择该Excel文件

当我的VBA脚本无法确定要使用哪个工作表时,它会打开一个Excel对话框:“选择工作表”。这太棒了!如何以编程方式控制和使用“工作表选择”对话框

我正在写一个代码,使用

Application.FileDialog(msoFileDialogFilePicker)
..设置变量=所选文件名,但我也尝试将变量设置为该文件中的某个工作表。没有打开文件的情况下

我希望工作流是:

  • 打开文件对话框->选择Excel文件>确定
  • 工作表对话框打开(如Excel的“选择工作表”对话框)->选择该Excel文件中的一个工作表>确定
  • 我已经浏览了Application.Dialog(xl…)的内容,但找不到正确的选项

    请帮忙!谢谢

    你可以试试这个(改编自Tom Urtis的)


    “选择工作表”对话框是什么意思?如果您已经在VBA代码中使用它,那么您已经“以编程方式控制”了它。你能说得更具体些吗?此外,“我还试图为该文件中的某个工作表设置一个变量。不打开该文件就可以完成所有操作。”这是不可能的。只有在工作表中有对象时,才能将变量设置为工作表-只有在打开文件时才是这种情况。“选择工作表”对话框看起来像一个组合框,所有文件的工作表都在一个列表中。当Excel不知道要使用哪个工作表时,它会打开。我想知道您是否可以使用某种对话框工作表选择器将未打开的工作表的名称填充到变量中,就像您可以使用msoFileDialogFilePicker对话框将未打开但已选择的文件的名称填充到VBA变量中一样。我仍然不清楚“选择工作表”功能。您是否有具体的示例(或示例代码)?对于图纸列表:必须首先打开文件才能查看其中的图纸。你必须打开一个目录才能看到里面有什么文件。如果不打开文件,则无法执行此操作。不过,可以在后台打开文件,之后可以直接关闭文件。所有这些都可以在没有用户注册的情况下完成,因为文件已经打开。但是它必须被打开,不管你如何尝试为用户打开它。哇,这看起来很有效。现在我要想办法把它包装成一个看起来很快的东西,我们已经准备好了。你说的“看起来很快”是什么意思?上述内容实际上会弹出一个列表,从中选择图纸名称。否则,您可以使用userformYeah,尝试找出如何在userform环境中执行此操作,而不实际创建一个,希望使用默认提示/对话框。据我所知,您可以使用上面的内容,实际上是“默认提示”,或者使用Userfom
    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