Comment afficher la boîte de dialogue" Ouvrir le fichier " dans accès 2007 VBA?
Comment afficher un dialogue Ouvrir un fichier (ou sélectionner un fichier) dans access 2007 VBA?
j'ai essayé L'Application.GetOpenFileName comme dans Excel, mais cette fonction n'existe pas dans Access.
5 réponses
mes commentaires sur la réponse de Renaud Bompuis ont foiré.
en fait, vous pouvez utiliser late binding, et la référence à la bibliothèque d'objets 11.0 n'est pas nécessaire.
le code suivant fonctionnera sans aucune référence:
Dim f As Object
Set f = Application.FileDialog(3)
f.AllowMultiSelect = True
f.Show
MsgBox "file choosen = " & f.SelectedItems.Count
notez que ce qui précède fonctionne aussi bien à l'exécution.
dans accès 2007 vous avez juste besoin d'utiliser Application.FileDialog
.
Voici l'exemple de la documentation D'accès:
' 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
comme le dit l'échantillon, assurez-vous d'avoir une référence à la Microsoft Access 12.0 Object Library (sous le menu VBE IDE > Tools > References).
en plus de ce Qu'Albert a déjà dit:
ce code (un mashup de différents samples) fournit la possibilité d'avoir une boîte de dialogue 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
j'ai une solution similaire à celle ci-dessus et cela fonctionne pour l'ouverture, la sauvegarde, la sélection de fichier. Je le colle dans son propre module et l'utilise dans tous les accès DB que je crée. Comme le code l'indique, il nécessite Microsoft Office 14.0 Object Library. Juste une autre option, je suppose:
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
je suis d'accord John M a la meilleure réponse à l'OP de la question. Pensé non explicitement énoncé, le but apparent est d'obtenir un nom de fichier sélectionné, alors que d'autres réponses retournent soit des comptes ou des listes. J'ajouterais, cependant, que le msofiledialogfilepicker pourrait être une meilleure option dans ce cas. ie:
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
Note: la valeur de varfile reste la même puisque Multi-Select est false (un seul élément est sélectionné). J'ai utilisé sa valeur en dehors de la boucle avec le même succès. C'est probablement une meilleure pratique de le faire comme L'a fait John M. Aussi, le dossier sélecteur peut être utilisé pour obtenir un dossier sélectionné. Je préfère toujours la liaison tardive, mais je pense que l'objet est originaire de l'accès par défaut de la bibliothèque, de sorte qu'il peut ne pas être nécessaire ici