Microsoft Excel

Herbers Excel/VBA-Archiv

Application.FileDialog-Eigenschaften


Betrifft: Application.FileDialog-Eigenschaften von: Barbaraa
Geschrieben am: 28.04.2017 22:15:21

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

  

Betrifft: AW: Application.FileDialog-Eigenschaften von: Zwenn
Geschrieben am: 29.04.2017 19:35:11

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


  

Betrifft: Noch zu Chdir von: Zwenn
Geschrieben am: 29.04.2017 19:51:28

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


  

Betrifft: AW: Noch zu Chdir von: Barbaraa
Geschrieben am: 29.04.2017 20:48:44

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


  

Betrifft: AW: Noch zu Chdir von: Zwenn
Geschrieben am: 29.04.2017 21:25:24

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


  

Betrifft: AW: Noch zu Chdir von: Barbaraa
Geschrieben am: 29.04.2017 22:40:18

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


  

Betrifft: AW: Wert Dateiauswahl-Dialog prüfen von: fcs
Geschrieben am: 30.04.2017 04:41:00

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



  

Betrifft: AW: Wert Dateiauswahl-Dialog prüfen von: Barbaraa
Geschrieben am: 01.05.2017 00:29:43

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?


  

Betrifft: FileDialog(...) oder GetOpenFilename, von: EtoPHG
Geschrieben am: 02.05.2017 10:36:56

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


  

Betrifft: AW: FileDialog(...) oder GetOpenFilename, von: Barbaraa
Geschrieben am: 02.05.2017 18:07:09

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