Получить путь к файлу (заканчивается папкой) - PullRequest
11 голосов
/ 12 мая 2011

Я знаю, как позволить пользователю нажать на кнопку, чтобы перейти к открытому файлу.

Код:

Private Sub CommandButton2_Click()
    Dim vaFiles As Variant

    vaFiles = Application.GetOpenFilename()

    ActiveSheet.Range("B9") = vaFiles
End Sub

Мне нужна вторая кнопка, которая позволит пользователю перейти в папку, чтобы сохранить файл .pdf, который создает моя программа.

Проблема: GetOpenFilename требует, чтобы пользователь щелкнул файл. Если в папке нет файла, пользователь ничего не может сделать.

Ответы [ 6 ]

23 голосов
/ 12 мая 2011

Используйте объект Application.FileDialog

Sub SelectFolder()
    Dim diaFolder As FileDialog
    Dim selected As Boolean

    ' Open the file dialog
    Set diaFolder = Application.FileDialog(msoFileDialogFolderPicker)
    diaFolder.AllowMultiSelect = False
    selected = diaFolder.Show

    If selected Then
        MsgBox diaFolder.SelectedItems(1)
    End If

    Set diaFolder = Nothing
End Sub
5 голосов
/ 29 апреля 2014

К этому добавили ErrorHandler на случай, если пользователь нажмет кнопку отмены вместо выбора папки.Таким образом, вместо того, чтобы получить ужасное сообщение об ошибке, вы получите сообщение о том, что папка должна быть выбрана, а затем процедура заканчивается.Приведенный ниже код также сохраняет путь к папке в имени диапазона (который просто связан с ячейкой A1 на листе).

Sub SelectFolder()

Dim diaFolder As FileDialog

'Open the file dialog
On Error GoTo ErrorHandler
Set diaFolder = Application.FileDialog(msoFileDialogFolderPicker)
diaFolder.AllowMultiSelect = False
diaFolder.Title = "Select a folder then hit OK"
diaFolder.Show
Range("IC_Files_Path").Value = diaFolder.SelectedItems(1)
Set diaFolder = Nothing
Exit Sub

ErrorHandler:
Msg = "No folder selected, you must select a folder for program to run"
Style = vbError
Title = "Need to Select Folder"
Response = MsgBox(Msg, Style, Title)

End Sub
2 голосов
/ 12 мая 2011

В меню «Инструменты» редактора VBA выберите «Ссылки» ... прокрутите вниз до «Элементы управления Microsoft Automation» и выберите его.

Sub FolderSelection()
    Dim MyPath As String
    MyPath = SelectFolder("Select Folder", "")
    If Len(MyPath) Then
        MsgBox MyPath
    Else
        MsgBox "Cancel was pressed"
    End If
End Sub

'Both arguements are optional. The first is the dialog caption and
'the second is is to specify the top-most visible folder in the
'hierarchy. The default is "My Computer."

Function SelectFolder(Optional Title As String, Optional TopFolder _
                         As String) As String
    Dim objShell As New Shell32.Shell
    Dim objFolder As Shell32.Folder

'If you use 16384 instead of 1 on the next line,
'files are also displayed
    Set objFolder = objShell.BrowseForFolder _
                            (0, Title, 1, TopFolder)
    If Not objFolder Is Nothing Then
        SelectFolder = objFolder.Items.Item.Path
    End If
End Function

Ссылка на источник .

1 голос
/ 12 октября 2016

Если вы хотите перейти к папке по умолчанию: например, «D: \ Default_Folder», просто инициализируйте атрибут «InitialFileName»

Dim diaFolder As FileDialog

' Open the file dialog
Set diaFolder = Application.FileDialog(msoFileDialogFolderPicker)
diaFolder.AllowMultiSelect = False
diaFolder.InitialFileName = "D:\Default_Folder"
diaFolder.Show
1 голос
/ 12 мая 2011

Используйте Application.GetSaveAsFilename() так же, как вы использовали Application.GetOpenFilename()

0 голосов
/ 23 мая 2015

Это может помочь вам:

Sub SelectFolder()
    Dim diaFolder As FileDialog
    Dim Fname As String

    Set diaFolder = Application.FileDialog(msoFileDialogFolderPicker)
    diaFolder.AllowMultiSelect = False
    diaFolder.Show

    Fname = diaFolder.SelectedItems(1)

    ActiveSheet.Range("B9") = Fname

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