2016-09-14 3 views
0

Ich verwende ein Excel 2013-Makro zum Extrahieren von Daten aus einer benutzerdefinierten Arbeitsmappe und meine VBA ist ein bisschen eingerostet.Erhalten Arbeitsmappe Verweis von Dialogfeld Öffnen

Application.GetOpenFilename fragt den Benutzer nach einem Speicherort, öffnet die Datei und gibt eine Zeichenfolge zurück. Workbooks.Open(string) gibt ein Arbeitsbuch zurück - wenn Sie den Namen im Voraus wissen.

Ich möchte diese kombinieren, um den Benutzer fragen, welche Datei zu öffnen, und eine Arbeitsmappe zurückgeben.

Basierend auf Frank Antwort hier (Open a workbook using FileDialog and manipulate it in Excel VBA) Ich habe das versucht:

Function openDataFile() As Workbook 
' 
    Dim wb As Workbook 
    Dim filename As String 
    Dim fd As Office.FileDialog 
    Set fd = Application.FileDialog(msoFileDialogFilePicker) 
    fd.AllowMultiSelect = False 
    fd.Title = "Select the file to extract data" 
    'filename = fd.SelectedItems(1) 
    Set wb = Workbooks.Open(fd.SelectedItems(1)) 
    openDataFile = wb 

End Function 

aber dies fällt auf die Kommentarzeile über mit Run-time error '5': Invalid procedure call or argument.

Wie ich den Benutzer haben prompt eine Excel-Datei zu öffnen und einen Verweis darauf als Arbeitsmappe zurückgeben?

+0

versuchen Sie den Code in meiner Antwort unter –

Antwort

1

unter dem Code Versuche:

Function openDataFile() As Workbook 
' 
Dim wb   As Workbook 
Dim filename  As String 
Dim fd   As FileDialog 

Set fd = Application.FileDialog(msoFileDialogFilePicker) 
fd.AllowMultiSelect = False 
fd.Title = "Select the file to extract data" 

' Optional properties: Add filters 
fd.Filters.Clear 
fd.Filters.Add "Excel files", "*.xls*" ' show Excel file extensions only 

' means success opening the FileDialog 
If fd.Show = -1 Then 
    filename = fd.SelectedItems(1) 
End If 

' error handling if the user didn't select any file 
If filename = "" Then 
    MsgBox "No Excel file was selected !", vbExclamation, "Warning" 
    End 
End If 

Set openDataFile = Workbooks.Open(filename) 

End Function 

dann unter den Sub I hinzugefügt, um diese Funktion zu testen:

Sub test() 

Dim testWb As Workbook 

Set testWb = openDataFile  
Debug.Print testWb.Name 

End Sub 
+0

Verkauft! Interessanterweise konnte ich 'Workbooks (" nameFromFileDialog ") nicht aktivieren. Aktiviere", was ursprünglich die Frage ausgelöst hat. Ich erwartete 'Workbooks (workbookReference) .Activate' zu ​​arbeiten, aber es scheint, dass ich' Workbooks (workbookReference.Name) .Activate' benötige. So, jetzt bekomme ich nicht, warum die Zeichenfolge, die ich ursprünglich versuchte, nicht funktioniert, aber die Workbook-Namen-String tut ... (aber ich werde keinen Schlaf darüber verlieren :) – mcalex

0

wie Sie die FileDialog nicht so vielleicht so etwas wie folgt aussieht gezeigt haben:

Function openDataFile() As Workbook 
' 
    Dim wb As Workbook 
    Dim filename As String 
    Dim fd As Office.FileDialog 
    Set fd = Application.FileDialog(msoFileDialogFilePicker) 
    fd.AllowMultiSelect = False 
    fd.Title = "Select the file to extract data" 
    fd.show 
    On Error Resume Next ' handling error over the select.. later in the script you could have an `if fileName = "" then exit sub` or something to that affect 
    fileName = fd.SelectedItems(1) 
    On Error GoTo 0 
    Set wb = Workbooks.Open(fileName) 
    openDataFile = wb 

End Function 
+0

Mein Code zeigt den FileDialog. Ich denke, der Grund für die Verwendung von .show besteht darin, zu sehen, ob der filialialog wahr oder falsch zurückgibt. – mcalex

Verwandte Themen