ms-access - programar - vba access pdf
¿Cómo mostrar el cuadro de diálogo "Abrir archivo" en Access 2007 VBA? (5)
Además de lo que Albert ya dijo:
Este código (un mashup de varias muestras) proporciona la capacidad de tener un cuadro de diálogo Guardar como
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
¿Cómo podría mostrar un cuadro de diálogo de abrir archivo (o seleccionar archivo) en Access 2007 VBA?
He intentado usar Application.GetOpenFileName como lo haría en Excel, pero esta función no existe en Access.
En Access 2007 solo necesita usar Application.FileDialog
.
Aquí está el ejemplo de la documentación de 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
Como muestra la muestra, solo asegúrese de tener una referencia a la Biblioteca de objetos de Microsoft Access 12.0 (en el menú VBE IDE> Herramientas> Referencias).
Estoy de acuerdo en que John M tiene la mejor respuesta a la pregunta de OP. Aunque no se haya expresado explícitamente, el objetivo aparente es obtener un nombre de archivo seleccionado, mientras que otras respuestas devuelven recuentos o listas. Sin embargo, agregaría que el msofiledialogfilepicker podría ser una mejor opción en este caso. es decir:
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
Nota: el valor de varfile seguirá siendo el mismo ya que multiselect es falso (solo se selecciona un elemento). Utilicé su valor fuera del ciclo con igual éxito. Sin embargo, es una mejor práctica hacerlo como lo hizo John M. Además, el selector de carpetas se puede usar para obtener una carpeta seleccionada. Siempre prefiero el enlace tardío, pero creo que el objeto es nativo de la biblioteca de acceso predeterminada, por lo que puede no ser necesario aquí
Mis comentarios sobre la respuesta de Renaud Bompuis se estropearon.
En realidad, puede usar el enlace tardío y no se requiere la referencia a la biblioteca de objetos 11.0.
El siguiente código funcionará sin ninguna referencia:
Dim f As Object
Set f = Application.FileDialog(3)
f.AllowMultiSelect = True
f.Show
MsgBox "file choosen = " & f.SelectedItems.Count
Tenga en cuenta que lo anterior también funciona bien en el tiempo de ejecución.
Tengo una solución similar a la anterior y funciona para abrir, guardar, seleccionar archivos. Lo pego en su propio módulo y lo uso en todos los DB de acceso que creo. Como el código indica que requiere Microsoft Office 14.0 Object Library. Solo otra opción, supongo:
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