Как поместить курсор в список файлов открытого FileDialog? - PullRequest
0 голосов
/ 04 мая 2018

Есть ли способ управления FileDialog в VBA, чтобы курсор перемещался в начало списка файлов в открытом 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 голосов
/ 04 мая 2018

Диалог по определению является блокирующим вызовом - поэтому вы не можете SendKeys после вызова .Show и до того, как пользователь закроет диалоговое окно, потому что следующая команда, которая будет выполняться после .Show, будет выполняться после диалог закрылся.

Нажатие 10x Tab , чтобы попасть в элемент управления списком, кажется мне излишним.

Я уверен, что ваш пользователь будет рад узнать, что он может переключать элементы управления в противоположном направлении , удерживая нажатой клавишу Shift ; здесь я могу добраться до элемента управления списком, нажав Shift + Tab дважды .

Кроме этого, вы можете выдвинуть предложение Excel UserVoice , чтобы заставить Microsoft изменить это поведение, но я бы не стал останавливаться на этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...