Как включить msoFileDialogFolderPicker в форму пользователя - PullRequest
0 голосов
/ 15 мая 2018

В пользовательской форме vba я предлагаю пользователю несколько вопросов. Я застрял с одной конкретной подсказкой. Я не знаю, как включить приглашение для msoFileDialogFolderPicker в пользовательской форме.
Я использовал код, подобный функции, описанной ниже, в качестве отдельного всплывающего окна, но я не знаю, как разместить его внутри пользовательской формы. Возможно ли это?

Function GetFolder() As String
    Dim fldr As FileDialog
    Dim sItem As String
    Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
    With fldr
        .Title = "Select a Folder"
        .AllowMultiSelect = False
        .InitialFileName = Application.DefaultFilePath
        If .Show <> -1 Then GoTo NextCode
        sItem = .SelectedItems(1)
    End With
NextCode:
    GetFolder = sItem
    Set fldr = Nothing
End Function

Спасибо за просмотр.

1 Ответ

0 голосов
/ 15 мая 2018

Начните с создания модуля (в окне VBA, на левой панели, щелкните правой кнопкой мыши, Вставьте ..., Модуль). Затем переместите вашу функцию GetFolder() в этот модуль, объявленный как public

Option Explicit

Public Function GetFolder() As String
    Dim fldr As FileDialog
    Dim sItem As String
    Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
    With fldr
        .Title = "Select a Folder"
        .AllowMultiSelect = False
        .InitialFileName = Application.DefaultFilePath
        If .Show <> -1 Then GoTo NextCode
        sItem = .SelectedItems(1)
    End With
NextCode:
    GetFolder = sItem
    Set fldr = Nothing
End Function

Тогда в вашей форме вы хотите что-то, что вызовет процедуру. Обычно мы делаем это с помощью кнопки.

Итак, добавьте кнопку в форму. Затем дважды щелкните по кнопке (или щелкните правой кнопкой мыши и «код»), и она создаст для нее событие щелчка.

В коде события кнопки вызовите процедуру GetFolder:

Option Explicit

Private Sub CommandButton1_Click()
    Dim strFolder As String

    strFolder = GetFolder()

    MsgBox strFolder

End Sub
...