2016-06-14 10 views
1

Ich importiere gerade einen Ordner voller Excel-Dateien mit dem folgenden Code in Access. Ich möchte Makro zu anderen exportieren, aber mit dem fest codierten Pfad würde es für andere nicht funktionieren. Aber ich bin mir nicht sicher, wie man den Pfad ändert, um eine Benutzereingabe zu akzeptieren Ich möchte versuchen, etwas wie einen Datei-Explorer zu machen, aber nicht sicher, wie.Benutzer ausgewähltes Dateiverzeichnis Zugriff VBA

Dim otable As DAO.TableDef 
Dim strPathFile As String, strFile As String, strpath As String 
Dim strTable As String 
Dim blnHasFieldNames As Boolean 

' accept excel first line as headers for tables 
blnHasFieldNames = True 

' Path to files 
strpath = "C:\Users\MyName\Desktop\Test\" 


strFile = Dir(strpath & "*.xls") 

'import all files within selected folder 
Do While Len(strFile) > 0 
strPathFile = strpath & strFile 
strTable = Left(strFile, Len(strFile) - 5) 
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _ 
    strTable, strPathFile, blnHasFieldNames 
strFile = Dir() 
Loop 

Unten ist das, was ich zu ändern versucht haben, wenn ich einen Fehler von bin gegeben „Methode‚Dateidialog‘von object_'Application‘ nicht bestanden“und bin mir nicht sicher, ob ich das falsch verwenden.

strpath = Application.FileDialog(msoFileDialogFilePicker) 
+2

Bitte zeigen Sie uns den Code, der 'Application.FileDialog' reißen mit. Hier ist ein funktionierendes Beispiel von Access VBA mit [Application.FileDialog (msoFileDialogFolderPicker)] (http://Stackoverflow.com/a/15906899/77335) – HansUp

+0

Ich habe ein neues Makro erstellt, um den Link zu testen, und ich habe immer noch den Fehler " Methode 'filialialog' von object_'Application 'fehlgeschlagen " – Rukgo

+0

Sprechen Sie über ein Access-Makro oder Access VBA? – HansUp

Antwort

2

Danke an HansUp für die Hilfe bei der Lösung dieses Problems.

Die einen Ordner auswählen und alle Dateien laden innerhalb der Ordner ist unten ...

Const msoFileDialogFolderPicker As Long = 4 
Dim objfiledialog As Object 
Dim otable As DAO.TableDef 
Dim strPathFile As String, strFile As String, strpath As String 
Dim strTable As String 
Dim blnHasFieldNames As Boolean 

' accept excel first line as headers for tables 
blnHasFieldNames = True 

'select folder and set path 
Set objfiledialog = Application.FileDialog(msoFileDialogFolderPicker) 

With objfiledialog 
.AllowMultiSelect = False 
If .Show Then 
strpath = .SelectedItems(1) & Chr(92) 
End If 
End With 

strFile = Dir(strpath & "*.xls") 

'import all files within selected folder 
Do While Len(strFile) > 0 
strPathFile = strpath & strFile 
strTable = Left(strFile, Len(strFile) - 5) 
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _ 
    strTable, strPathFile, blnHasFieldNames 
strFile = Dir() 
Loop 
+1

Sieht gut aus, Rukgo. Ich schlage vor, dass Sie sicherstellen, dass 'Len (strpath)> 0 'ist, damit Sie den Rest des Codes nicht versuchen, wenn der Benutzer im FileDialog auf" Abbrechen "klickt. – HansUp