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

时间:2018-05-04 16:30:44

标签: excel vba excel-vba filedialog

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

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

按下TAB键10次将光标移动到列表顶部,但我想自动执行该过程。最好,我可以告诉,我不能使用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

1 个答案:

答案 0 :(得分:0)

根据定义,对话框是一个阻塞调用 - 所以你不能在调用SendKeys之后和用户关闭对话框之前.Show,因为下一条指令要在{{{}之后运行对话框关闭后,将运行

点击10x Tab 进入列表框控件对我来说似乎有点过分了。

我确定您的用户可以通过按住 Shift 键来了解他们可以按相反方向循环控制 ;在这里,我可以按 Shift + Tab 两次进入列表框控件。

除此之外,你可以提出Excel UserVoice建议让微软改变这种行为,但我不会屏住呼吸。