title | keywords | f1_keywords | ms.prod | api_name | ms.assetid | ms.date | ms.localizationpriority |
---|---|---|---|---|---|---|---|
Application.FileDialog property (Word) |
vbawd10.chm158335426 |
vbawd10.chm158335426 |
word |
Word.Application.FileDialog |
ef478a81-db1d-4bf4-a146-3ff7dd84116b |
06/08/2017 |
medium |
Application.FileDialog property (Word)
Returns a FileDialog object which represents a single instance of a file dialog box.
Syntax
expression. FileDialog
( _FileDialogType_
)
expression Required. A variable that represents an Application object.
Parameters
Name | Required/Optional | Data type | Description |
---|---|---|---|
FileDialogType | Required | MsoFileDialogType | The type of dialog. |
Example
This example displays the Save As dialog box.
Sub ShowSaveAsDialog() Dim dlgSaveAs As FileDialog Set dlgSaveAs = Application.FileDialog( _ FileDialogType:=msoFileDialogSaveAs) dlgSaveAs.Show End Sub
This example displays the Open dialog box and allows a user to select multiple files to open.
Sub ShowFileDialog() Dim dlgOpen As FileDialog Set dlgOpen = Application.FileDialog( _ FileDialogType:=msoFileDialogOpen) With dlgOpen .AllowMultiSelect = True .Show End With End Sub
See also
Application Object
[!includeSupport and feedback]
Samuel13 1 / 0 / 1 Регистрация: 26.04.2015 Сообщений: 21 |
||||||||
1 |
||||||||
08.05.2016, 23:25. Показов 4822. Ответов 3 Метки нет (Все метки)
Есть код
Необходимо документ ворд выбирать при помощи диалога, пробовал что-то вроде этого
Только мне не совсем понятно, как это с объектом ворда связать. Буду очень признателен за помощь
0 |
Hugo121 6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
||||||||||||
08.05.2016, 23:47 |
2 |
|||||||||||
Сообщение было отмечено Samuel13 как решение РешениеВ код диалога добавляете
ну и далее можно открывать
или можно вообще без переменной sDoc написать. Добавлено через 4 минуты
1 |
1 / 0 / 1 Регистрация: 26.04.2015 Сообщений: 21 |
|
08.05.2016, 23:57 [ТС] |
3 |
Спасибо
0 |
Hugo121 6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
||||
09.05.2016, 08:36 |
4 |
|||
Вернее правильно так — т.к. открываете один файл, значит
нужно ставить False.
0 |
Often in VBA we need to ask the users to select files or directories before we execute the actual functionality of our macro. Welcome to the VBA Open file dialog post. Today we will learn how to use the Application.FileDialog, to understand the various msoFileDialogFilePicker file dialog picking options and how to properly manage these dialogs.
Here is a simple example of a VBA File Dialog:
Dim fDialog As FileDialog Set fDialog = Application.FileDialog(msoFileDialogFilePicker) 'Show the dialog. -1 means success! If fDialog.Show = -1 Then Debug.Print fDialog.SelectedItems(1) 'The full path to the file selected by the user End If
Application FileDialog function
Before we start let’s understand the Application.FileDialog function.
The Application.FileDialog has the following syntax:
Application.FileDialog( fileDialogType as MsoFileDialogType )
Parameter
MsoFileDialogType
An enumeration defining the type of file dialog to open. It has the following values:
Value | Description |
---|---|
msoFileDialogOpen | Open dialog box |
msoFileDialogSaveAs | Save As dialog box |
msoFileDialogFilePicker | File picker dialog box |
msoFileDialogFolderPicker | Folder picker dialog box |
Properties and functions
FileDialog properties
Property | Description |
---|---|
AllowMultiSelect | Allow to select more than one file or folder |
ButtonName | Text displayed on the action button of a file dialog box |
DialogType | Change the MsoFileDialogType (see above) |
Filter | Set a file filter to filter file types user can select |
InitialFileName | The initial path to be opened e.g. C: |
InitialView | The initial file view. Can be one of the following:
|
SelectedItems | Collection of type FileDialogSelectedItems with all selected items |
Title | Title of the Open file dialog window |
Select files – msoFileDialogFilePicker
The msoFileDialogFilePicker dialog type allows you to select one or more files.
Select single files
The most common select file scenario is asking the user to select a single file. The code below does just that:
Dim fDialog As FileDialog, result As Integer Set fDialog = Application.FileDialog(msoFileDialogFilePicker) 'Optional: FileDialog properties fDialog.AllowMultiSelect = False fDialog.title = "Select a file" fDialog.InitialFileName = "C:" 'Optional: Add filters fDialog.Filters.Clear fDialog.Filters.Add "Excel files", "*.xlsx" fDialog.Filters.Add "All files", "*.*" 'Show the dialog. -1 means success! If fDialog.Show = -1 Then Debug.Print fDialog.SelectedItems(1) End If 'Result: C:somefile.xlsx
Select multiple files
Quite common is a scenario when you are asking the user to select one or more files. The code below does just that. Notice that you need to set AllowMultiSelect to True.
Dim fDialog As FileDialog, result As Integer Set fDialog = Application.FileDialog(msoFileDialogFilePicker) 'IMPORTANT! fDialog.AllowMultiSelect = True 'Optional FileDialog properties fDialog.title = "Select a file" fDialog.InitialFileName = "C:" 'Optional: Add filters fDialog.Filters.Clear fDialog.Filters.Add "Excel files", "*.xlsx" fDialog.Filters.Add "All files", "*.*" 'Show the dialog. -1 means success! If fDialog.Show = -1 Then For Each it In fDialog.SelectedItems Debug.Print it Next it End If 'Results: 'C:somefile.xlsx 'C:somefile1.xlsx 'C:somefile2.xlsx
Select folder – msoFileDialogFilePicker
Selecting a folder is more simple than selecting files. However only a single folder can be select within a single dialog window.
Select folder example
The dialog below will ask the user to select a folder:
Set fDialog = Application.FileDialog(msoFileDialogFolderPicker) 'Important we use msoFileDialogFolderPicker instead of (...)FilePicker 'Optional: Properties fDialog.title = "Select a folder" fDialog.InitialFileName = "C:" If fDialog.Show = -1 Then Debug.Print fDialog.SelectedItems(1) End If
The msoFileDialogFolderPicker dialog allows you to only select a SINGLE folder and obviously does not support file folders
Open file – msoFileDialogOpen
Opening files is much more simple as it usually involves a single file. The only difference between the behavior between Selecting and Opening files are button labels.
Open file example
The dialog below will ask the user to select a file to open:
Dim fDialog As FileDialog, result As Integer, it As Variant Set fDialog = Application.FileDialog(msoFileDialogOpen) 'Optional: FileDialog properties fDialog.title = "Select a file" fDialog.InitialFileName = "C:" 'Optional: Add filters fDialog.Filters.Clear fDialog.Filters.Add "All files", "*.*" fDialog.Filters.Add "Excel files", "*.xlsx" If fDialog.Show = -1 Then Debug.Print fDialog.SelectedItems(1) End If
Save file – msoFileDialogSaveAs
Saving a file is similarly easy, and also only the buttons are differently named.
The save file dialog will in fact not save any files! It will just allow the user to select a filename for the file. You need to open the files for reading / writing yourself. Check out my post on how to write files in VBA
Save file example
The dialog below will ask the user to select a path to which a files is to be saved:
Dim fDialog As FileDialog, result As Integer, it As Variant Set fDialog = Application.FileDialog(msoFileDialogSaveAs) 'Optional: FileDialog properties fDialog.title = "Save a file" fDialog.InitialFileName = "C:" If fDialog.Show = -1 Then Debug.Print fDialog.SelectedItems(1) End If
The msoFileDialogSaveAs dialog does NOT support file filters
FileDialog Filters
One of the common problems with working with the Application.FileDialog is setting multiple file filters. Below some common examples of how to do this properly. To add a filter for multiple files use the semicolor ;:
Dim fDialog As FileDialog Set fDialog = Application.FileDialog(msoFileDialogOpen) '... 'Optional: Add filters fDialog.Filters.Clear fDialog.Filters.Add "All files", "*.*" fDialog.Filters.Add "Excel files", "*.xlsx;*.xls;*.xlsm" fDialog.Filters.Add "Text/CSV files", "*.txt;*.csv" '...
Be sure to clear your list of filters each time. The FileDialog has its nuisances and often filters are not cleared automatically. Hence, when creating multiple dialogs you might see filters coming from previous executed dialogs if not cleared and re-initiated properly.
The open file dialog will in fact not open any files! It will just allow the user to select files to open. You need to open the files for reading / writing yourself. Check out my posts:
- Read file in VBA
- Write file in VBA
- Список файлов
- Работа с файлами
Функции GetFileName и GetFilePath по сути аналогичны, и предназначены для вывода диалогового окна выбора файла
(при этом можно указать стартовую папку для поиска файла, и тип/расширение выбираемого файла)
Функция GetFilenamesCollection позволяет выборать сразу несколько файлов в одной папке.
Функция GetFolderPath работает также, только служит для вывода диалогового окна выбора папки.
Function GetFolderPath(Optional ByVal Title As String = "Выберите папку", _ Optional ByVal InitialPath As String = "c:") As String ' функция выводит диалоговое окно выбора папки с заголовком Title, ' начиная обзор диска с папки InitialPath ' возвращает полный путь к выбранной папке, или пустую строку в случае отказа от выбора Dim PS As String: PS = Application.PathSeparator With Application.FileDialog(msoFileDialogFolderPicker) If Not Right$(InitialPath, 1) = PS Then InitialPath = InitialPath & PS .ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath If .Show <> -1 Then Exit Function GetFolderPath = .SelectedItems(1) If Not Right$(GetFolderPath, 1) = PS Then GetFolderPath = GetFolderPath & PS End With End Function Sub ПримерИспользования_GetFolderPath() ПутьКПапке = GetFolderPath("Заголовок окна", ThisWorkbook.Path) ' запрашиваем имя папки If ПутьКПапке = "" Then Exit Sub ' выход, если пользователь отказался от выбора папки MsgBox "Выбрана папка: " & ПутьКПапке, vbInformation End Sub
Function GetFilePath(Optional ByVal Title As String = "Выберите файл для обработки", _ Optional ByVal InitialPath As String = "c:", _ Optional ByVal FilterDescription As String = "Книги Excel", _ Optional ByVal FilterExtention As String = "*.xls*") As String ' функция выводит диалоговое окно выбора файла с заголовком Title, ' начиная обзор диска с папки InitialPath ' возвращает полный путь к выбранному файлу, или пустую строку в случае отказа от выбора ' для фильтра можно указать описание и расширение выбираемых файлов On Error Resume Next With Application.FileDialog(msoFileDialogOpen) .ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath .Filters.Clear: .Filters.Add FilterDescription, FilterExtention If .Show <> -1 Then Exit Function GetFilePath = .SelectedItems(1): PS = Application.PathSeparator End With End Function Sub ПримерИспользования_GetFilePath() ИмяФайла = GetFilePath("Выберите файл Word", , "Документы Word", "*.doc") ' запрашиваем имя файла If ИмяФайла = "" Then Exit Sub ' выход, если пользователь отказался от выбора файла MsgBox "Выбран файл: " & ИмяФайла, vbInformation End Sub
Ниже представлены функции для вызова диалоговых окон выбора файлов и папок средствами VBA.
Функции GetFileName и GetFilePath по сути аналогичны, и предназначены для вывода диалогового окна выбора файла
(при этом можно указать стартовую папку для поиска файла, и типрасширение выбираемого файла)
Функция GetFilenamesCollection позволяет выборать сразу несколько файлов в одной папке.
Функция GetFolderPath работает аналогично, только служит для вывода диалогового окна выбора папки.
Function GetFileName(Optional ByVal Title As String = "Выберите файл для обработки", _ Optional ByVal InitialPath, _ Optional ByVal MyFilter As String = "Книги Excel (*.xls*),") As String ' функция выводит диалоговое окно выбора папки с заголовком Title, ' начиная обзор диска с папки InitialPath ' возвращает полный путь к выбранной папке, или пустую строку в случае отказа от выбора If Not IsMissing(InitialPath) Then On Error Resume Next: ChDrive Left(InitialPath, 1) ChDir InitialPath ' выбираем стартовую папку End If res = Application.GetOpenFilename(MyFilter, , Title, "Открыть") ' вывод диалогового окна GetFileName = IIf(VarType(res) = vbBoolean, "", res) ' пустая строка при отказе от выбора End Function Sub ПримерИспользования_GetFileName() ИмяФайла = GetFileName("Заголовок окна", ThisWorkbook.Path) ' запрашиваем имя файла ' ===================== другие варианты вызова функции ===================== ' текстовые файлы, стартовая папка не указана ' ИмяФайла = GetFileName("Выберите текстовый файл", , "Текстовые файлы (*.txt),") ' файлы любого типа из папки "C:Windows" ' ИмяФайла = GetFileName(, "C:Windows", "") ' ========================================================================== If ИмяФайла = "" Then Exit Sub ' выход, если пользователь отказался от выбора файла MsgBox "Выбран файл: " & ИмяФайла, vbInformation End Sub
Function GetFolderPath(Optional ByVal Title As String = "Выберите папку", _ Optional ByVal InitialPath As String = "c:") As String ' функция выводит диалоговое окно выбора папки с заголовком Title, ' начиная обзор диска с папки InitialPath ' возвращает полный путь к выбранной папке, или пустую строку в случае отказа от выбора Dim PS As String: PS = Application.PathSeparator With Application.FileDialog(msoFileDialogFolderPicker) If Not Right$(InitialPath, 1) = PS Then InitialPath = InitialPath & PS .ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath If .Show <> -1 Then Exit Function GetFolderPath = .SelectedItems(1) If Not Right$(GetFolderPath, 1) = PS Then GetFolderPath = GetFolderPath & PS End With End Function Sub ПримерИспользования_GetFolderPath() ПутьКПапке = GetFolderPath("Заголовок окна", ThisWorkbook.Path) ' запрашиваем имя папки ' ===================== другие варианты вызова функции ===================== ' стартовая папка не указана, заголовок окна по умолчанию ' ПутьКПапке = GetFolderPath ' обзор папок начинается с папки "Рабочий стол" ' СтартоваяПапка = CreateObject("WScript.Shell").SpecialFolders("Desktop") ' ПутьКПапке = GetFolderPath("Выберите папку на рабочем столе", СтартоваяПапка) ' ========================================================================== If ПутьКПапке = "" Then Exit Sub ' выход, если пользователь отказался от выбора папки MsgBox "Выбрана папка: " & ПутьКПапке, vbInformation End Sub
Function GetFilePath(Optional ByVal Title As String = "Выберите файл для обработки", _ Optional ByVal InitialPath As String = "c:", _ Optional ByVal FilterDescription As String = "Книги Excel", _ Optional ByVal FilterExtention As String = "*.xls*") As String ' функция выводит диалоговое окно выбора файла с заголовком Title, ' начиная обзор диска с папки InitialPath ' возвращает полный путь к выбранному файлу, или пустую строку в случае отказа от выбора ' для фильтра можно указать описание и расширение выбираемых файлов On Error Resume Next With Application.FileDialog(msoFileDialogOpen) .ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath .Filters.Clear: .Filters.Add FilterDescription, FilterExtention If .Show <> -1 Then Exit Function GetFilePath = .SelectedItems(1): PS = Application.PathSeparator End With End Function Sub ПримерИспользования_GetFilePath() ИмяФайла = GetFilePath("Выберите файл Word", , "Документы Word", "*.doc") ' запрашиваем имя файла ' ===================== другие варианты вызова функции ===================== ' текстовые файлы, стартовая папка не указана ' ИмяФайла = GetFilePath("Выберите текстовый файл", , "Текстовые файлы", "*.txt") ' файлы любого типа из папки "C:Windows" ' ИмяФайла = GetFilePath(, "C:Windows", , "*") ' ========================================================================== If ИмяФайла = "" Then Exit Sub ' выход, если пользователь отказался от выбора файла MsgBox "Выбран файл: " & ИмяФайла, vbInformation End Sub
Function GetFilenamesCollection(Optional ByVal Title As String = "Выберите файлы для обработки", _ Optional ByVal InitialPath As String = "c:") As FileDialogSelectedItems ' функция выводит диалоговое окно выбора нескольких файлов с заголовком Title, ' начиная обзор диска с папки InitialPath ' возвращает массив путей к выбранным файлам, или пустую строку в случае отказа от выбора With Application.FileDialog(3) ' msoFileDialogFilePicker .ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath If .Show <> -1 Then Exit Function Set GetFilenamesCollection = .SelectedItems End With End Function Sub ПримерИспользования_GetFilenamesCollection() Dim СписокФайлов As FileDialogSelectedItems Set СписокФайлов = GetFilenamesCollection("Заголовок окна", ThisWorkbook.Path) ' выводим окно выбора ' ===================== другие варианты вызова функции ===================== ' стартовая папка не указана, заголовок окна по умолчанию Set СписокФайлов = GetFilenamesCollection ' обзор файлов начинается с папки "Рабочий стол" СтартоваяПапка = CreateObject("WScript.Shell").SpecialFolders("Desktop") Set СписокФайлов = GetFilenamesCollection("Выберите файлы на рабочем столе", СтартоваяПапка) ' ========================================================================== If СписокФайлов Is Nothing Then Exit Sub ' выход, если пользователь отказался от выбора файлов For Each File In СписокФайлов Debug.Print File Next End Sub
Ещё один вариант кода (который я использую) для выбора файла
Его отличие — функция запоминает папку, из которой последний раз выбирался файл,
и при повторном запуске диалогового окна выбора файла,
обзор папок будет начат с той папки, откуда последний раз был взят файл.
Sub AttachFile_test() ' пример использования Filename$ = GetFilePath() If Filename$ = "" Then Exit Sub MsgBox "Выбран файл: " & Filename$ End Sub Function GetFilePath(Optional ByVal Title As String = "Выберите файл для обработки", _ Optional ByVal InitialPath As String = "c:", _ Optional ByVal FilterDescription As String = "Файлы счетов", _ Optional ByVal FilterExtention As String = "*.*") As String On Error Resume Next With Application.FileDialog(msoFileDialogOpen) .ButtonName = "Выбрать": .Title = Title: .InitialFileName = GetSetting(Application.Name, "GetFilePath", "folder", InitialPath) .Filters.Clear: .Filters.Add FilterDescription, FilterExtention If .Show <> -1 Then Exit Function GetFilePath = .SelectedItems(1) folder$ = Left(.SelectedItems(1), InStrRev(.SelectedItems(1), "")) SaveSetting Application.Name, "GetFilePath", "folder", folder$ End With End Function
- 214442 просмотра
Не получается применить макрос? Не удаётся изменить код под свои нужды?
Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.
Функции GetFileName и GetFilePath по сути аналогичны, и предназначены для вывода диалогового окна выбора файла
(при этом можно указать стартовую папку для поиска файла, и тип/расширение выбираемого файла)
Функция GetFilenamesCollection позволяет выборать сразу несколько файлов в одной папке.
Функция GetFolderPath работает также, только служит для вывода диалогового окна выбора папки.
Function GetFolderPath(Optional ByVal Title As String = "Выберите папку", _
Optional ByVal InitialPath As String = "c:") As String
' функция выводит диалоговое окно выбора папки с заголовком Title,
' начиная обзор диска с папки InitialPath
' возвращает полный путь к выбранной папке, или пустую строку в случае отказа от выбора
Dim PS As String: PS = Application.PathSeparator
With Application.FileDialog(msoFileDialogFolderPicker)
If Not Right$(InitialPath, 1) = PS Then InitialPath = InitialPath & PS
.ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath
If .Show <> -1 Then Exit Function
GetFolderPath = .SelectedItems(1)
If Not Right$(GetFolderPath, 1) = PS Then GetFolderPath = GetFolderPath & PS
End With
End Function
Sub ПримерИспользования_GetFolderPath()
ПутьКПапке = GetFolderPath("Заголовок окна", ThisWorkbook.Path) ' запрашиваем имя папки
If ПутьКПапке = "" Then Exit Sub ' выход, если пользователь отказался от выбора папки
MsgBox "Выбрана папка: " & ПутьКПапке, vbInformation
End Sub
Function GetFilePath(Optional ByVal Title As String = "Выберите файл для обработки", _
Optional ByVal InitialPath As String = "c:", _
Optional ByVal FilterDescription As String = "Книги Excel", _
Optional ByVal FilterExtention As String = "*.xls*") As String
' функция выводит диалоговое окно выбора файла с заголовком Title,
' начиная обзор диска с папки InitialPath
' возвращает полный путь к выбранному файлу, или пустую строку в случае отказа от выбора
' для фильтра можно указать описание и расширение выбираемых файлов
On Error Resume Next
With Application.FileDialog(msoFileDialogOpen)
.ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath
.Filters.Clear: .Filters.Add FilterDescription, FilterExtention
If .Show <> -1 Then Exit Function
GetFilePath = .SelectedItems(1): PS = Application.PathSeparator
End With
End Function
Sub ПримерИспользования_GetFilePath()
ИмяФайла = GetFilePath("Выберите файл Word", , "Документы Word", "*.doc") ' запрашиваем имя файла
If ИмяФайла = "" Then Exit Sub ' выход, если пользователь отказался от выбора файла
MsgBox "Выбран файл: " & ИмяФайла, vbInformation
End Sub
Ниже представлены функции для вызова диалоговых окон выбора файлов и папок средствами VBA.
Функции GetFileName и GetFilePath по сути аналогичны, и предназначены для вывода диалогового окна выбора файла
(при этом можно указать стартовую папку для поиска файла, и типрасширение выбираемого файла)
Функция GetFilenamesCollection позволяет выборать сразу несколько файлов в одной папке.
Функция GetFolderPath работает аналогично, только служит для вывода диалогового окна выбора папки.
Function GetFileName(Optional ByVal Title As String = "Выберите файл для обработки", _
Optional ByVal InitialPath, _
Optional ByVal MyFilter As String = "Книги Excel (*.xls*),") As String
' функция выводит диалоговое окно выбора папки с заголовком Title,
' начиная обзор диска с папки InitialPath
' возвращает полный путь к выбранной папке, или пустую строку в случае отказа от выбора
If Not IsMissing(InitialPath) Then
On Error Resume Next: ChDrive Left(InitialPath, 1)
ChDir InitialPath ' выбираем стартовую папку
End If
res = Application.GetOpenFilename(MyFilter, , Title, "Открыть") ' вывод диалогового окна
GetFileName = IIf(VarType(res) = vbBoolean, "", res) ' пустая строка при отказе от выбора
End Function
Sub ПримерИспользования_GetFileName()
ИмяФайла = GetFileName("Заголовок окна", ThisWorkbook.Path) ' запрашиваем имя файла
' ===================== другие варианты вызова функции =====================
' текстовые файлы, стартовая папка не указана
' ИмяФайла = GetFileName("Выберите текстовый файл", , "Текстовые файлы (*.txt),")
' файлы любого типа из папки "C:Windows"
' ИмяФайла = GetFileName(, "C:Windows", "")
' ==========================================================================
If ИмяФайла = "" Then Exit Sub ' выход, если пользователь отказался от выбора файла
MsgBox "Выбран файл: " & ИмяФайла, vbInformation
End Sub
Function GetFolderPath(Optional ByVal Title As String = "Выберите папку", _
Optional ByVal InitialPath As String = "c:") As String
' функция выводит диалоговое окно выбора папки с заголовком Title,
' начиная обзор диска с папки InitialPath
' возвращает полный путь к выбранной папке, или пустую строку в случае отказа от выбора
Dim PS As String: PS = Application.PathSeparator
With Application.FileDialog(msoFileDialogFolderPicker)
If Not Right$(InitialPath, 1) = PS Then InitialPath = InitialPath & PS
.ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath
If .Show <> -1 Then Exit Function
GetFolderPath = .SelectedItems(1)
If Not Right$(GetFolderPath, 1) = PS Then GetFolderPath = GetFolderPath & PS
End With
End Function
Sub ПримерИспользования_GetFolderPath()
ПутьКПапке = GetFolderPath("Заголовок окна", ThisWorkbook.Path) ' запрашиваем имя папки
' ===================== другие варианты вызова функции =====================
' стартовая папка не указана, заголовок окна по умолчанию
' ПутьКПапке = GetFolderPath
' обзор папок начинается с папки "Рабочий стол"
' СтартоваяПапка = CreateObject("WScript.Shell").SpecialFolders("Desktop")
' ПутьКПапке = GetFolderPath("Выберите папку на рабочем столе", СтартоваяПапка)
' ==========================================================================
If ПутьКПапке = "" Then Exit Sub ' выход, если пользователь отказался от выбора папки
MsgBox "Выбрана папка: " & ПутьКПапке, vbInformation
End Sub
Function GetFilePath(Optional ByVal Title As String = "Выберите файл для обработки", _
Optional ByVal InitialPath As String = "c:", _
Optional ByVal FilterDescription As String = "Книги Excel", _
Optional ByVal FilterExtention As String = "*.xls*") As String
' функция выводит диалоговое окно выбора файла с заголовком Title,
' начиная обзор диска с папки InitialPath
' возвращает полный путь к выбранному файлу, или пустую строку в случае отказа от выбора
' для фильтра можно указать описание и расширение выбираемых файлов
On Error Resume Next
With Application.FileDialog(msoFileDialogOpen)
.ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath
.Filters.Clear: .Filters.Add FilterDescription, FilterExtention
If .Show <> -1 Then Exit Function
GetFilePath = .SelectedItems(1): PS = Application.PathSeparator
End With
End Function
Sub ПримерИспользования_GetFilePath()
ИмяФайла = GetFilePath("Выберите файл Word", , "Документы Word", "*.doc") ' запрашиваем имя файла
' ===================== другие варианты вызова функции =====================
' текстовые файлы, стартовая папка не указана
' ИмяФайла = GetFilePath("Выберите текстовый файл", , "Текстовые файлы", "*.txt")
' файлы любого типа из папки "C:Windows"
' ИмяФайла = GetFilePath(, "C:Windows", , "*")
' ==========================================================================
If ИмяФайла = "" Then Exit Sub ' выход, если пользователь отказался от выбора файла
MsgBox "Выбран файл: " & ИмяФайла, vbInformation
End Sub
Function GetFilenamesCollection(Optional ByVal Title As String = "Выберите файлы для обработки", _
Optional ByVal InitialPath As String = "c:") As FileDialogSelectedItems
' функция выводит диалоговое окно выбора нескольких файлов с заголовком Title,
' начиная обзор диска с папки InitialPath
' возвращает массив путей к выбранным файлам, или пустую строку в случае отказа от выбора
With Application.FileDialog(3) ' msoFileDialogFilePicker
.ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath
If .Show <> -1 Then Exit Function
Set GetFilenamesCollection = .SelectedItems
End With
End Function
Sub ПримерИспользования_GetFilenamesCollection()
Dim СписокФайлов As FileDialogSelectedItems
Set СписокФайлов = GetFilenamesCollection("Заголовок окна", ThisWorkbook.Path) ' выводим окно выбора
' ===================== другие варианты вызова функции =====================
' стартовая папка не указана, заголовок окна по умолчанию
Set СписокФайлов = GetFilenamesCollection
' обзор файлов начинается с папки "Рабочий стол"
СтартоваяПапка = CreateObject("WScript.Shell").SpecialFolders("Desktop")
Set СписокФайлов = GetFilenamesCollection("Выберите файлы на рабочем столе", СтартоваяПапка)
' ==========================================================================
If СписокФайлов Is Nothing Then Exit Sub ' выход, если пользователь отказался от выбора файлов
For Each File In СписокФайлов
Debug.Print File
Next
End Sub
Ещё один вариант кода (который я использую) для выбора файла
Его отличие — функция запоминает папку, из которой последний раз выбирался файл,
и при повторном запуске диалогового окна выбора файла,
обзор папок будет начат с той папки, откуда последний раз был взят файл.
Sub AttachFile_test() ' пример использования
Filename$ = GetFilePath()
If Filename$ = "" Then Exit Sub
MsgBox "Выбран файл: " & Filename$
End Sub
Function GetFilePath(Optional ByVal Title As String = "Выберите файл для обработки", _
Optional ByVal InitialPath As String = "c:", _
Optional ByVal FilterDescription As String = "Файлы счетов", _
Optional ByVal FilterExtention As String = "*.*") As String
On Error Resume Next
With Application.FileDialog(msoFileDialogOpen)
.ButtonName = "Выбрать": .Title = Title:
.InitialFileName = GetSetting(Application.Name, "GetFilePath", "folder", InitialPath)
.Filters.Clear: .Filters.Add FilterDescription, FilterExtention
If .Show <> -1 Then Exit Function
GetFilePath = .SelectedItems(1)
folder$ = Left(.SelectedItems(1), InStrRev(.SelectedItems(1), ""))
SaveSetting Application.Name, "GetFilePath", "folder", folder$
End With
End Function
- 138056 просмотров
Содержание
- 1 Displays a dialog box that allows the user to select a directory. The selected directory name (or «Canceled») is then displayed by using the MsgBox function.
- 2 FileDialogFilters
- 3 FileDialog with JPG file filter
- 4 Get selected paths
- 5 Open File Open Dialog and get the selection (Dialog Types Used with the FileDialog Object)
- 6 Set the AllowMultiSelect property of the dialog box to allow multiple selections in the dialog box
- 7 The FileDialog Object
- 8 User selects path to save HTML files
- 9 Use the SelectedItems property of the FileDialog object to return the FileDialogSelectedItems collection.
- 10 You can use the Add method of the FileDialogFilters collection object to create your own list of filter
Displays a dialog box that allows the user to select a directory. The selected directory name (or «Canceled») is then displayed by using the MsgBox function.
<source lang="vb"> Sub GetAFolder() With Application.FileDialog(msoFileDialogFolderPicker) .InitialFileName = Application.DefaultFilePath & "" .Title = "Please select a location for the backup" .Show If .SelectedItems.Count = 0 Then MsgBox "Canceled" Else MsgBox .SelectedItems(1) End If End With End Sub </source>
FileDialogFilters
<source lang="vb"> Private Sub cmdGetFile_Click() Dim fd As FileDialog Dim ffs As FileDialogFilters Dim vItem On Error GoTo Problem Set fd = Application.FileDialog(msoFileDialogOpen) With fd Set ffs = .Filters With ffs .clear .add "Pictures", "*.jpg" End With .AllowMultiSelect = True If .show = False Then Exit Sub For Each vItem In .SelectedItems Debug.Print vItem Next vItem End With Exit Sub
Problem:
MsgBox "That was not a valid picture" End Sub </source>
FileDialog with JPG file filter
<source lang="vb"> Private Sub cmdGetFile_Click() Dim fd As FileDialog Dim ffs As FileDialogFilters On Error GoTo Problem Set fd = Application.FileDialog(msoFileDialogOpen) With fd Set ffs = .Filters With ffs .clear .add "Pictures", "*.jpg" End With .AllowMultiSelect = False If .show = False Then Exit Sub Image1.Picture = LoadPicture(.SelectedItems(1)) End With Exit Sub
Problem:
MsgBox "That was not a valid picture" End Sub </source>
Get selected paths
<source lang="vb">
Public Sub ShowFileDialog()
Dim fd As FileDialog Dim selectedPaths() As String Dim I As Integer Set fd = Application.FileDialog(msoFileDialogOpen) With fd "Configure dialog box .AllowMultiSelect = True .FilterIndex = 2 .Title = "Select Excel File(s)" .InitialFileName = "" "Show the dialog and collect file paths selected by the user If .Show = -1 Then "User clicked Open ReDim selectedPaths(.SelectedItems.Count - 1) "Store file paths for later use. For I = 0 To .SelectedItems.Count - 1 selectedPaths(I) = .SelectedItems(I + 1) Next I End If .Execute "Open selected files End With Set fd = Nothing
End Sub
</source>
Open File Open Dialog and get the selection (Dialog Types Used with the FileDialog Object)
<source lang="vb">
Dialog Type VBA Constant (FileDialogType)
Open msoFileDialogOpen
Save msoFileDialogSaveAs
File Picker msoFileDialogFilePicker
Folder Picker msoFileDialogFolderPicker
Sub openDlg()
Dim fc As FileDialogFilters Dim ff As FileDialogFilter Set fc = Application.FileDialog(msoFileDialogOpen).Filters Set ff = fc.Item(1) MsgBox ff.Description & ff.Extensions "Displays "AllFiles" and *.*
End Sub
</source>
Set the AllowMultiSelect property of the dialog box to allow multiple selections in the dialog box
<source lang="vb">
Sub OpenDialog()
Dim dlgOpen As FileDialog Set dlgOpen = Application.FileDialog( _ DialogType:=msoFileDialogOpen) With dlgOpen .AllowMultiSelect = True .Show End With msgBox dlgOpen.SelectedItems(1)
End Sub
</source>
The FileDialog Object
<source lang="vb">
Sub SaveDialog()
Dim dlgSaveAs As FileDialog Set dlgSaveAs = Application.FileDialog(DialogType:=msoFileDialogSaveAs) dlgSaveAs.Show msgBox dlgSaveAs.SelectedItems(1)
End Sub
</source>
User selects path to save HTML files
<source lang="vb">
Private Sub cmdChangePath_Click()
Dim fd As FileDialog Dim I As Integer Set fd = Application.FileDialog(msoFileDialogFolderPicker) With fd .AllowMultiSelect = False "Allow only one selection .Title = "Select Folder" .InitialFileName = "" If .Show = -1 Then MsgBox .SelectedItems(1) End If End With Set fd = Nothing
End Sub
</source>
Use the SelectedItems property of the FileDialog object to return the FileDialogSelectedItems collection.
<source lang="vb">
Sub selected()
Dim si As FileDialogSelectedItems Set si = Application.FileDialog(msoFileDialogOpen).SelectedItems
End Sub
</source>
You can use the Add method of the FileDialogFilters collection object to create your own list of filter
<source lang="vb">
Sub fileDlg()
Dim fd As FileDialog Dim imagePath As String Set fd = Application.FileDialog(msoFileDialogFilePicker) With fd .AllowMultiSelect = False .Filters.Clear .Filters.Add "All files", "*.*" .Filters.Add "Image", "*.jpg", 1 .FilterIndex = 1 .InitialFileName = "" .Title = "Select JPEG file" If .Show = -1 Then "User pressed action button imagePath = .SelectedItems(1) End If End With
End Sub
</source>
Формулировка задачи:
Есть код
Необходимо документ ворд выбирать при помощи диалога, пробовал что-то вроде этого
Только мне не совсем понятно, как это с объектом ворда связать. Буду очень признателен за помощь
Код к задаче: «Диалог выбора файла Word»
textual
If .Show = -1 Then sDoc = .SelectedItems(1)
Полезно ли:
9 голосов , оценка 4.000 из 5
I have a vba macro that makes some changes to the current document and determines a filename that should be used for it — if the document isn’t saved as that filename yet the user should be prompted to do so (but should be able to alter the default setting).
I found two possibilities that both are not perfect (I’d need a mix of those two).
First approach:
Application.Dialogs(wdDialogFileSaveAs).Show
Opens the Save As
dialog and lets you change the format and name of the file, but the default file name is the old filename or the title (up to the first special character like blank or -
) of the document (in case it wasn’t saved yet — changing the title of the document is of little help as the suggested filename will contain -
). Is it possible to change the initial filename shown in the Save As
dialog?
Second approach:
Application.FileDialog(msoFileDialogSaveAs).InitialFileName = filename
Dim choice As Integer
choice = Application.FileDialog(msoFileDialogSaveAs).Show
If choice <> 0 Then
filename = Application.FileDialog(msoFileDialogSaveAs).SelectedItems(1)
Call ActiveDocument.SaveAs(filename:=filename, FileFormat:=wdFormatDocumentDefault)
End If
The FileDialog
will choose a filename only, so we have to save it explicitely.
This approach will show the filename
I want, but if the user changes the suffix to e.g .pdf
the file will still be saved in the .docx
format (using the suffix .pdf). I didn’t plan to have huge distinction of cases here for the rare case the user needs a different format than .docx
. Is there an easy way to save the file in the correct format using this second approach?