2017-07-26 7 views
0

Ich habe ein Makro, das einen Benutzer auffordert, mehrere Dateien für die Datenanalyse auszuwählen. Der Benutzer wählt zuerst eine Excel- oder CSV-Datei aus (XLSX, XLS, CSV) und fragt dann nach einer zweiten Datei, jedoch nur nach CSV. Die Absicht des Tools besteht darin, die beiden Datendateien zu einem zu kombinieren.VBA Excel FileDialog zum Setzen/Zurücksetzen von Filtern

In einem Sub, frage ich den Benutzer jeden kompatiblen XLSX, XLS auszuwählen, oder CSV-Dateien mit dem File Code verwendet:

Dim myObj As Object 
Dim myDirString As String 
Set myObj = Application.FileDialog(msoFileDialogFilePicker) 
With myObj 
    .InitialFileName = "C:\Users\" & Environ$("Username") & "\Desktop" 
    .Filters.Add "Custom Excel Files", "*.xlsx, *.csv, *.xls" 
    .FilterIndex = 1 
    If .Show = False Then MsgBox "Please select Excel file.", vbExclamation: Exit Sub 
    myDirString = .SelectedItems(1) 
End With 

Es scheint angemessen zu filtern:

Custom Excel Files

Nachdem diese Datenanalyse abgeschlossen ist, führt der Benutzer eine zweite Sub aus, um eine andere Datei auszuwählen, aber es muss nur eine CSV-Datei sein. So verwende ich diesen Code CSV zu beantragen:

Dim yourObj3 As Object 
Dim yourDirString3 As String 
Set yourObj3 = Application.FileDialog(msoFileDialogFilePicker) 
With yourObj3 
    .InitialFileName = "C:\Users\" & Environ$("Username") & "\Desktop" 
    .Filters.Add "CSV Files", "*.csv" 
    .FilterIndex = 1 
    If .Show = False Then MsgBox "Please select CSV file.", vbExclamation: Exit Sub 
    yourDirString3 = .SelectedItems(1) 
End With 

Das Problem ist die File-Dialog-Box erinnert mich an den ersten Filter (Custom XLS) und sie müssen Sie die Tropfen klicken nur die entsprechenden Filter für CSV zu sehen ...

Select CSV

So ist dies sicherlich für den Benutzer verwirrend sein würde ... ich vermute, ich brauche unsere dass der erste Filter auf „clear“, nachdem der Benutzer das erste Makro abgeschlossen ist. Irgendwelche Vorschläge zu diesem Code, um den ersten Filter zu löschen (oder zurückzusetzen)?

versucht, dies darunter das Hinzufügen, wenn ich gefunden, was ich dachte, eine ähnliche Frage FileDialog persists previous filters war:

With .Filters 
.Clear 
End With 

Aber Ergebnisse in Compile-Fehler: Dies funktioniert in meiner Umgebung

+1

Mit der '.Clear' Methode der' .Filters' Eigenschaft eines 'FileDialog' Objekt funktioniert, so alles, was ich denken kann, ist, dass Sie nicht den' Mit .Filters' gelegt haben in Ihrem 'Mit yourObj3 'blockieren. – YowE3K

Antwort

1

ungültig oder unqualifizierte Referenz. Das einzige, was ich anders gemacht habe, war, Dialoge als FileDialog anstelle von Object zu deklarieren.

Sub Test() 
    Dim myObj As FileDialog 
    Dim myDirString As String 
    Set myObj = Application.FileDialog(msoFileDialogFilePicker) 
    With myObj 
     .InitialFileName = "C:\Users\" & Environ$("Username") & "\Desktop" 
     .Filters.Clear 
     .Filters.Add "Custom Excel Files", "*.xlsx, *.csv, *.xls" 
     .FilterIndex = 1 
     .Show 
    End With 
    Dim yourObj3 As FileDialog 
    Dim yourDirString3 As String 
    Set yourObj3 = Application.FileDialog(msoFileDialogFilePicker) 
    With yourObj3 
     .InitialFileName = "C:\Users\" & Environ$("Username") & "\Desktop" 
     .Filters.Clear 
     .Filters.Add "CSV Files", "*.csv" 
     .FilterIndex = 1 
     .Show 
    End With 
End Sub 
+0

@ YowE3K du hast Recht, ich werde bearbeiten. – VBobCat

+1

P.S. Ich vermute, dass das Problem darin besteht, dass die OP die 'With .Filters' außerhalb der anderen' With' Blöcke platziert, so dass VBA nicht wusste, worauf sich das '.' in' .Filters' bezog. Der Code funktioniert unabhängig davon, ob es sich um ein 'Object' oder ein' FileDialog' handelt. – YowE3K

+0

Sie wissen was? Ich denke, du hast wieder Recht ... – VBobCat

Verwandte Themen