Получить путь к файлу (заканчивается папкой)
Я знаю, как позволить пользователю нажать на кнопку, чтобы перейти к открытому файлу.
Код:
Private Sub CommandButton2_Click()
Dim vaFiles As Variant
vaFiles = Application.GetOpenFilename()
ActiveSheet.Range("B9") = vaFiles
End Sub
Мне нужна вторая кнопка, которая позволит пользователю перейти в папку, чтобы сохранить файл .pdf
созданный моей программой.
Проблема: GetOpenFilename
требует, чтобы пользователь GetOpenFilename
файл. Если в папке нет файла, то пользователь ничего не может сделать.
Ответы
Ответ 1
Используйте объект 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
Ответ 2
Добавьте 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
Ответ 3
В меню "Инструменты редактора VBA" нажмите "Ссылки"... прокрутите вниз до "Microsoft Shell Controls And 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
Ссылка источника.
Ответ 4
Используйте Application.GetSaveAsFilename()
так же, как вы использовали Application.GetOpenFilename()
Ответ 5
Если вы хотите по умолчанию перейти к папке:
Например, "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
Ответ 6
Это может помочь вам:
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