如何将光标放在打开的 FileDialog 的文件列表中?

How can I put the cursor in the File List of an open FileDialog?

有没有办法控制 VBA 中的 FileDialog,使光标在打开的 FileDialog 中移动到文件列表的顶部? (光标似乎总是在 FileDialog 的文件名控件中。)

我想使用向下箭头键在打开的 FileDialog 的初始文件夹中的文件列表中移动。 (而不是使用鼠标 select 文件列表中的文件。)

按 10 次 TAB 键会将光标移动到列表的顶部,但我想自动执行该过程。据我所知,我不能使用 SendKeys - 无论是在 .Show 之前还是之后。所以我认为我不能以编程方式将 {TAB} 作为击键传递。

我正在 Outlook 中编写代码,但需要使用 Excel,因为 Outlook 不支持 FileDialog。

这是取自一个更大的函数。

    'Launch File Browser
    'NOTE:  Outlook actually does NOT support the FileDialog, so you need
    '       to hack a solution and use another Office app instead
    'This uses Excel to open the FileDialog

       Dim xlobj As Excel.Application
       Set xlobj = New Excel.Application
       With xlobj.FileDialog(msoFileDialogFilePicker)
        .InitialFileName = strStartFolderPath

        .Filters.Add "All files", "*.*"
        .Title = "Please Select a File to Attach"
        .AllowMultiSelect = True
        ' Try SendKeys Here? - Does NOt work
            SendKeys "{TAB}"

            .Show
            ' Try SendKeys Here? Does NOT Work because VBA waits for FileDialog
            'SendKeys "{TAB}"

            For i = 1 To .SelectedItems.Count
                varSelectedItem = .SelectedItems(i)
                 objItem.Attachments.Add varSelectedItem
            Next i

    End With
    xlobj.Quit
    Set xlobj = Nothing

 Set myItem = Nothing
 Set objItem = Nothing
 Set myolapp = Nothing

根据定义,对话框是一个阻塞调用 - 因此您不能 SendKeys 在调用 .Show 之后和用户关闭对话框之前,因为 [=36= 的下一条指令] 在 .Show 之后 运行 宁 对话框关闭后。

点击 10x Tab 来访问列表框控件,但对我来说似乎太过分了。

我相信您的用户会很高兴得知他们可以通过按住 Shift 以相反的方向 循环控制 ] 钥匙;在这里,我可以通过按 Shift+Tab 两次.[=14= 来访问列表框控件]

除此之外,您可以提出 Excel UserVoice 建议让 Microsoft 改变该行为,但我不会对那个保持呼吸。