Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Application.FileDialog-Eigenschaften

Forumthread: Application.FileDialog-Eigenschaften

Application.FileDialog-Eigenschaften
28.04.2017 22:15:21
Barbaraa
Hallo
Wenn ich
with Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False oder True, je Wunsch
ein zweites Mal ausführe, ist die Einstellung für .AllowMultiSelect die des vorigen Aufrufs.
Warum ist das so? FileDialog ist doch ein Objekt, das jedes Mal neu erstellt wird.
Wie lange bleibt diese Einstellung erhalten? Über die Sitzung hinaus? Oder gibt es nur ein einziges Objekt dieser Art?
Und noch eine Frage in diesem Zusammenhang:
In der Hilfe lese ich bei "Chdir" vom "aktuellen Verzeichnis", das ich wechseln kann. Worauf bezieht sich das "aktuell"? Was ändert sich nach "chdir"?
LG, Barbara
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Application.FileDialog-Eigenschaften
29.04.2017 19:35:11
Zwenn
Hallo Barbaraa,
du hast die Methode Application.FileDialog() mit dem Parameter msoFileDialogFilePicker gewählt. Also Application.FileDialog(msoFileDialogFilePicker). Ich habe dieses Konstrukt bisher nicht verwendet. Wenn ich unter folgendem Link nachesehe, wundere ich mich auch, dass Du überhaupt eine Möglichkeit gefunden hast, mehrere Dateien 'in einem Rutsch' auszuwählen. Es ist lediglich eine Möglichkeit genannt eine Datei auszuwählen.
https://msdn.microsoft.com/de-de/library/office/ff836226.aspx
Meine direkte Antwort bzw. Frage auf Dein Problem wäre gewesen: 'Bist Du sicher, dass Du ein zweites Objekt erzeugt hast, dem Du die multible Auswahl zuweist?'
Nun denke ich aber, Dir ist mehr geholfen, wenn ich Dich auf die Methode Application.GetOpenFilename() hinweise. Zwar habe ich bisher nie versucht erst nur eine und dann mehrere Dateien darüber auszuwählen. Aber ich weiß, dass es mit der Auswahl mehrerer über den Parameter MultiSelect funktioniert.
https://msdn.microsoft.com/de-de/library/office/ff834966.aspx
Abgesehen davon kannst man auch mit der Setzung von MultiSelect lediglich eine einzige Datei auswählen ;-)
Viele Grüße,
Zwenn
Anzeige
Noch zu Chdir
29.04.2017 19:51:28
Zwenn
Nochmal ich,
weil ich im ersten Posting nicht dran gedacht habe auch auf diese Frage einzugehen
Chdir steht für change directory, also dem Wechsel des Verzeichnisses. Aktuell bedeutet also einfach nur das Verzeichnis, in dem Du Dich grade befindest. Den Parameter chdir kannst Du allein ja auch gar nicht alleine verwenden. Du musst dahinter ein Verzeichnis angeben, in das du wecheseln willst. Von daher gesehen ändert sich nach einem Verzeichniswechsel halt einfach das Verzeichnis, von dem aus Du für andere Dateien agierst.
Viele Grüße,
Zwenn
Anzeige
AW: Noch zu Chdir
29.04.2017 20:48:44
Barbaraa
Hallo Zwenn
erst mal zu Chdir:
Ich habe beobachtet, dass
Application.GetOpenFilename("PDF Files , *.pdf")
den Ordner C:\Users\Barbara\Documents anzeigt. Warum gerade diesen? Ist das der "aktuelle ordner", in dem ich mich gerade befinde? Die aktuelle Excel-Datei ist jedenfalls in einem anderen Ordner.
Erst nach
Chdir ThisWorkbook.Path
zeigt GetOpenFilename den Ordner der Excel-Datei an.
In diesem Zusammenhang verstehe ich Deine Erklärung
"Aktuell bedeutet also einfach nur das Verzeichnis, in dem Du Dich grade befindest."
nicht.
In welchem Verzeichnis befinde ich mich zu Beginn?
Was bedeutet es, das Verzeichnis zu wechseln?
LG, Barbara
Anzeige
AW: Noch zu Chdir
29.04.2017 21:25:24
Zwenn
Schön, dass Du noch online bist.
Sofern zuvor explizit kein Verzeichnis ausgewählt wurde (was zu Beginn des Excel Aufrufs nach meinem Wissen auch nicht möglich ist), wird das Standardverzeichnis des Btriebssystems gewählt. Das ist das Document Verzeichnis, im User Verzeichnis. Dein User-Name ist also Barbara. Das ist der Name, unter dem Dein Windows Benutzername angelegt wurde. Ganz spezifisch hast Du den ganzen Pfad ja angegeben: C:\Users\Barbara\Documents
Das ist also einfach nur das Ausgangs-Verzeichnis, unter dem das Betriebssystem eine Datei speichern möchte, die es bisher nicht kannte. Das hat mit der aktuell geöffnten (Excel) Datei erstmal gar nix zu tun. Der Ort, das Verzeichnis, wo diese liegt, spielt einfach keine Rolle. Windows geht immer zunächst mal vom Standard-User-Verzeichnis aus. Die Frage wäre ja sonst: Wo soll die Datei, die bisher nie gespeichert wurde, denn nun gespeichert werden?
Insofern ist 'das aktuele Verzeichnis' wirklich genau dieser.
In dem Moment, in dem Du dem Makro sagst Chdir ThisWorkbook.Path wechselst Du in das Verzeichnis, in dem die Excel-Datei liegt, in der sich auch Dein Makro befindet.
Das Verzeichnis zu wechseln sollte nach der vorhergehenden Erklärung eigentlich klar sein. Da eigentlich immer eine Einschränkung darstellt ... Frag ruhig nach :-)
Vile Grüße,
Zwenn
Anzeige
AW: Noch zu Chdir
29.04.2017 22:40:18
Barbaraa
Gut, verstehe. Habe mein Vokabular erweitert mit "Aktuelles Verzeichnis". DANKE
Auch "Application.FileDialog.InitialFileName" ändert den aktuellen Pfad.
Nun habe ich aber ein Problem mit Application.GetOpenFilename.
In meinem Beispiel soll die Zelle mit dem Namen "WW_Datei" den gewählten Pfad und Dateinamen bekommen. Falls der Dialog abgebrochen wurde, soll diese Zelle so bleiben, wie sie ist.
Das Makro soll auf einem deutschen und auf einem englischen Excel laufen.
Hier mein Beispiel mit Application.FileDialog:
Private Sub Dialog()
With Application.FileDialog(msoFileDialogFilePicker)
.Filters.Clear
.Filters.Add "PDF", "*.pdf"
.AllowMultiSelect = False
.InitialFileName = ThisWorkbook.Path
If .Show = False Then Exit Sub
Range("WW_Datei") = .SelectedItems(1)
End With
End Sub
Das geht.
Aber mit Folgendem habe ich ein Problem:
Private Sub Filename()
Dim a As String
ChDir ThisWorkbook.Path
a = Application.GetOpenFilename("PDF (*.pdf), *.pdf")
'was soll da stehen
Range("WW_Datei") = a
End Sub
Wie soll ich die Zelle "WW_Datei" beschreiben? Bei Abbruch kommt "Falsch" raus, was aber im Englischen wahrscheinlich nicht so ist. Brauche ich da jetzt für jede mögliche Sprache eine individuelle Abfrage?
Und: Was ist nun besser (oder schlechter) an GetOpenFilename?
Noch was (nur, falls es von Bedeutung ist): Du hast von der Methode Application.FileDialog() geschrieben. Im beigefügten Link steht aber Application.FileDialog-Eigenschaft (Excel).
Danke für Deine fachkundige Hilfe.
LG, Barbara
Anzeige
AW: Wert Dateiauswahl-Dialog prüfen
30.04.2017 04:41:00
fcs
Hallo Barbara,
du musst die Variable (hier a), die den Rückgabewert des Dialoges übernimmt als Variant deklarieren.
Dann kannst du die Variablen unabhängig von der Spracheinstellung prüfen.
Entweder auf Typename oder auf Wert.
LG
Franz
Private Sub Filename()
Dim a As Variant
ChDir ThisWorkbook.Path
a = Application.GetOpenFilename("PDF (*.pdf), *.pdf")
'was soll da stehen
If VBA.TypeName(a) = "Boolean" Then Exit Sub
Range("WW_Datei") = a
End Sub
Private Sub Filename()
Dim a As Variant
ChDir ThisWorkbook.Path
a = Application.GetOpenFilename("PDF (*.pdf), *.pdf")
'was soll da stehen
If a = False Then Exit Sub
Range("WW_Datei") = a
End Sub

Anzeige
AW: Wert Dateiauswahl-Dialog prüfen
01.05.2017 00:29:43
Barbaraa
Sicher, a als string deklarieren, war mein Fehler.
Danke für Dein Beispiel, Franz.
Bleibt noch die Frage offen:
Was ist nun besser (oder schlechter) an GetOpenFilename im Vergleich mit FileDialog?
FileDialog(...) oder GetOpenFilename,
02.05.2017 10:36:56
EtoPHG
Hallo Barbara,
Die Frage ist nicht "Was ist nun besser (oder schlechter)".
Grundsätzlich empfiehlt Microsoft ab Windows-Vista den Einsatz der API-Funktion GetOpenFilename anstelle von internen Filedialogen von Applikationen.
Zu der Frage, warum die Einstellungen von Filedialog die Einstellung behält: Das ist grundsätzlich mit vielen, bzw. den meisten, Dialog Objekten der Applikation (Excel) der Fall. Die Hilfe ist darum nicht ganz klar, wenn sie sagt "Es sich um eine Instanz des Dialogs"... Es ist nicht eine Instanz (oder bessere Instanzierung) des Objekts, sondern es ist die Instanz, bzw. das an die Appplikation gebundene Objekt selbst.
Gruess Hansueli
Anzeige
AW: FileDialog(...) oder GetOpenFilename,
02.05.2017 18:07:09
Barbaraa
Hi Hansueli
gut, dann werde ich diese Überlegungen mit einbeziehen.
Deine anschaulichen Erläuterungen verstehe ich und habe (zumindest bis zum Absenden dieser Nachricht) keine weiteren Fragen.
Danke Dir und den anderen Unterstützern, für Eure Antworten und Hilfen.
LG, Barbara
Anzeige
;
Anzeige

Infobox / Tutorial

Anwendung von Application.FileDialog in Excel VBA


Schritt-für-Schritt-Anleitung

Um den Application.FileDialog in Excel VBA effektiv zu nutzen, folge diesen Schritten:

  1. Öffne den VBA-Editor: Drücke ALT + F11 in Excel.

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (DeinWorkbookName)" und wähle "Einfügen" > "Modul".

  3. Schreibe den Code: Nutze den folgenden Beispielcode, um den FileDialog zu öffnen:

    Private Sub Dialog()
       With Application.FileDialog(msoFileDialogFilePicker)
           .AllowMultiSelect = False
           .Filters.Clear
           .Filters.Add "PDF", "*.pdf"
           .InitialFileName = ThisWorkbook.Path
           If .Show = -1 Then
               Range("WW_Datei").Value = .SelectedItems(1)
           End If
       End With
    End Sub
  4. Schließe den VBA-Editor: Drücke ALT + Q oder schließe das Fenster.

  5. Führe das Makro aus: Gehe zurück zu Excel, öffne das "Makro" Menü und führe das erstellte Makro aus.


Häufige Fehler und Lösungen

  • Fehler: Abbruch des Dialogs gibt "Falsch" zurück: Wenn du Application.GetOpenFilename verwendest, musst du die Rückgabewerte korrekt prüfen. Ändere den Typ der Variablen a in Variant:

    Dim a As Variant
    a = Application.GetOpenFilename("PDF (*.pdf), *.pdf")
    If a = False Then Exit Sub
    Range("WW_Datei").Value = a
  • Einstellung von .AllowMultiSelect bleibt erhalten: Das liegt daran, dass Application.FileDialog eine Instanz ist, die ihre Einstellungen zwischen den Aufrufen behält. Achte darauf, die Option .AllowMultiSelect vor jedem Aufruf zu setzen.


Alternative Methoden

  • GetOpenFilename: Eine Alternative zu Application.FileDialog ist die Verwendung von Application.GetOpenFilename, die eine einfachere Möglichkeit bietet, eine Datei auszuwählen. Der Hauptunterschied ist, dass GetOpenFilename weniger konfigurierbar ist, aber effizient für einfache Auswahlprozesse.

    Beispiel:

    Dim a As Variant
    a = Application.GetOpenFilename("PDF (*.pdf), *.pdf")
    If a <> False Then
       Range("WW_Datei").Value = a
    End If

Praktische Beispiele

  1. Dateiauswahl mit mehreren Optionen:

    Private Sub MultiSelectDialog()
       With Application.FileDialog(msoFileDialogFilePicker)
           .AllowMultiSelect = True
           If .Show = -1 Then
               Dim selectedFiles As String
               Dim i As Integer
               For i = 1 To .SelectedItems.Count
                   selectedFiles = selectedFiles & .SelectedItems(i) & vbCrLf
               Next i
               MsgBox selectedFiles
           End If
       End With
    End Sub
  2. Speichern unter mit FileDialog:

    Private Sub SaveDialog()
       With Application.FileDialog(msoFileDialogSaveAs)
           .Title = "Speichern unter"
           .InitialFileName = "MeinDokument.pdf"
           If .Show = -1 Then
               ' Speichervorgang hier implementieren
           End If
       End With
    End Sub

Tipps für Profis

  • Nutze .Filters um die Dateitypen, die im Dialog angezeigt werden, anzupassen und die Benutzererfahrung zu verbessern.
  • Setze .InitialFileName auf den gewünschten Startpfad, um die Navigation für Benutzer zu erleichtern.
  • Vermeide es, den Dateidialog in einer Schleife zu öffnen, um unerwartete Ergebnisse zu verhindern.

FAQ: Häufige Fragen

1. Kann ich den FileDialog so einstellen, dass mehrere Dateien ausgewählt werden können? Ja, setze .AllowMultiSelect auf True, um es Benutzern zu ermöglichen, mehrere Dateien auszuwählen.

2. Wie kann ich den Standardordner für den FileDialog festlegen? Verwende die Eigenschaft .InitialFileName, um den gewünschten Ordner zu definieren, in dem der Dialog geöffnet wird.

3. Was ist der Unterschied zwischen FileDialog und GetOpenFilename? FileDialog bietet mehr Anpassungsmöglichkeiten, während GetOpenFilename eine einfachere Methode zur Dateiauswahl darstellt, die weniger Konfiguration erfordert.

4. Wie gehe ich mit Sprachunterschieden in Excel um? Deklariere die Rückgabewerte als Variant und prüfe sie, um sprachunabhängig zu arbeiten. So kannst du die Ergebnisse unabhängig von der Spracheinstellung des Benutzers verarbeiten.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige