Подтвердить что ты не робот

Как показать диалог "Открыть файл" в Access 2007 VBA?

Как я могу открыть диалоговое окно открытого файла (или выбора файла) в Access VBA?

Я попытался использовать Application.GetOpenFileName, как в Excel, но эта функция не существует в Access.

4b9b3361

Ответ 1

Мои комментарии по поводу ответа Рено Бумпуса перепутались.

На самом деле вы можете использовать позднюю привязку, и ссылка на библиотеку объектов 11.0 не требуется.

Следующий код будет работать без каких-либо ссылок:

 Dim f    As Object 
 Set f = Application.FileDialog(3) 
 f.AllowMultiSelect = True 
 f.Show 

 MsgBox "file choosen = " & f.SelectedItems.Count 

Обратите внимание, что это также хорошо работает и во время выполнения.

Ответ 2

В Access 2007 вам просто нужно использовать Application.FileDialog.

Вот пример из документации Access:

' Requires reference to Microsoft Office 12.0 Object Library. '
Private Sub cmdFileDialog_Click()
   Dim fDialog As Office.FileDialog
   Dim varFile As Variant

   ' Clear listbox contents. '
   Me.FileList.RowSource = ""

   ' Set up the File Dialog. '
   Set fDialog = Application.FileDialog(msoFileDialogFilePicker)

   With fDialog

      ' Allow user to make multiple selections in dialog box '
      .AllowMultiSelect = True

      ' Set the title of the dialog box. '
      .Title = "Please select one or more files"

      ' Clear out the current filters, and add our own.'
      .Filters.Clear
      .Filters.Add "Access Databases", "*.MDB"
      .Filters.Add "Access Projects", "*.ADP"
      .Filters.Add "All Files", "*.*"

      ' Show the dialog box. If the .Show method returns True, the '
      ' user picked at least one file. If the .Show method returns '
      ' False, the user clicked Cancel. '
      If .Show = True Then

         'Loop through each file selected and add it to our list box. '
         For Each varFile In .SelectedItems
            Me.FileList.AddItem varFile
         Next

      Else
         MsgBox "You clicked Cancel in the file dialog box."
      End If
   End With
End Sub

Как следует из примера, просто убедитесь, что у вас есть ссылка на библиотеку объектов Microsoft Access 12.0 (в меню VBE IDE > Инструменты > Ссылки).

Ответ 3

Дополнение к тому, что сказал Альберт:

Этот код (mashup различных образцов) предоставляет возможность иметь диалоговое окно SaveAs

Function getFileName() As String
    Dim fDialog    As Object
    Set fDialog = Application.FileDialog(msoFileDialogSaveAs)
    Dim varFile As Variant

    With fDialog
       .AllowMultiSelect = False
       .Title = "Select File Location to Export XLSx :"
       .InitialFileName = "jeffatwood.xlsx"

    If .Show = True Then
       For Each varFile In .SelectedItems
         getFileName = varFile
       Next
    End If
End With
End Function

Ответ 4

У меня есть аналогичное решение выше, и оно работает для открытия, сохранения, выбора файла. Я вставляю его в свой собственный модуль и использую во всех создаваемых БД доступа. Как говорится в коде, для него требуется библиотека объектов Microsoft Office 14.0. Предположим, еще один вариант:

Public Function Select_File(InitPath, ActionType, FileType)
    ' Requires reference to Microsoft Office 14.0 Object Library.

    Dim fDialog As Office.FileDialog
    Dim varFile As Variant


    If ActionType = "FilePicker" Then
        Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
        ' Set up the File Dialog.
    End If
    If ActionType = "SaveAs" Then
        Set fDialog = Application.FileDialog(msoFileDialogSaveAs)
    End If
    If ActionType = "Open" Then
        Set fDialog = Application.FileDialog(msoFileDialogOpen)
    End If
    With fDialog
        .AllowMultiSelect = False
        ' Disallow user to make multiple selections in dialog box
        .Title = "Please specify the file to save/open..."
        ' Set the title of the dialog box.
        If ActionType <> "SaveAs" Then
            .Filters.Clear
            ' Clear out the current filters, and add our own.
            .Filters.Add FileType, "*." & FileType
        End If
        .InitialFileName = InitPath
        ' Show the dialog box. If the .Show method returns True, the
        ' user picked a file. If the .Show method returns
        ' False, the user clicked Cancel.
        If .Show = True Then
        'Loop through each file selected and add it to our list box.
            For Each varFile In .SelectedItems
                'return the subroutine value as the file path & name selected
                Select_File = varFile
            Next
        End If
    End With
End Function

Ответ 5

Я согласен, что у Джона М есть лучший ответ на вопрос ОП. Мысль явно не указана, очевидная цель - получить выбранное имя файла, тогда как другие ответы возвращают либо подсчеты, либо списки. Я бы добавил, однако, что msofiledialogfilepicker может быть лучшим вариантом в этом случае. т.е.:

Dim f As object
Set f = Application.FileDialog(msoFileDialogFilePicker)
dim varfile as variant 
f.show
with f
    .allowmultiselect = false
     for each varfile in .selecteditems
        msgbox varfile
     next varfile
end with

Примечание: значение varfile останется таким же, поскольку multiselect false (выбирается только один элемент). Я использовал его значение за пределами цикла с равным успехом. Однако, вероятно, лучше было сделать это, как это сделал Джон М. Кроме того, вы можете выбрать папку для выбора выбранной папки. Я всегда предпочитаю позднюю привязку, но я думаю, что объект является родным для библиотеки доступа по умолчанию, поэтому здесь может не понадобиться