Pfad über Dialog auswählen (FileDialog(msoFileDialogFolderPicker))

  • Excel

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Pfad über Dialog auswählen (FileDialog(msoFileDialogFolderPicker))

    Hallo,

    ich möchte den Pfad bzw einen Ordner über einen Dialog auswählen um ihn dan weiter zu verwenden.

    Verwende ich den untenstehenden Code, wie in vielen Bsp im net, kommt das Auswahlfenster.
    Wähle ich dann einen Ordner und klicke ok, MsgBox mit Pfad,und dann kommt das Auswahfenster wieder... Bin da in einer Schleife und komm aus dem If-Block nicht raus.

    Hab sämtliche Varianten mit dem Befehl probiert...

    BITTE um eure Hilfe, danke!


    VB.NET-Quellcode

    1. Public Function GetExcelfolder() As String
    2. With Application.FileDialog(msoFileDialogFolderPicker)
    3. .AllowMultiSelect = False
    4. .Title = "Bitte Ordner wählen"
    5. .InitialFileName = ""
    6. .InitialView = msoFileDialogViewThumbnail
    7. .ButtonName = "OK"
    8. If .Show = -1 Then
    9. GetExcelfolder = .SelectedItems(1)
    10. MsgBox GetExcelfolder
    11. End If
    12. End With
    13. End Function

    Hi BöseSuzi.

    Da wirst deinem Namen ja gerecht ;)
    Denn du hast eine Endlosschleife. Lass die Funktion so wie Sie ist, entferne nur die MsgBox Zeile.

    Dann rufe von außerhalb die Funktion auf:

    Visual Basic-Quellcode

    1. dim MyPath As string
    2. MyPath = GetExcelfolder
    3. Msgbox MyPath


    Im Moment rufst du in der Funktion die Funktion wieder auf, dass ist eine Endlosrekursion.

    Visual Basic-Quellcode

    1. Function GetExcelfolder
    2. '..
    3. MsgBox GetExcelfolder '<- hier rufst du die Funktion wieder auf
    4. End Function




    LG
    Das ist meine Signatur und sie wird wunderbar sein!
    Du musst diese Zeile wie gesagt entfernen:

    Visual Basic-Quellcode

    1. MsgBox GetExcelfolder


    Wenn du dann trotzdem noch eine Schleife hast, dann liegt das an deinem anderen Code.
    Das ist meine Signatur und sie wird wunderbar sein!

    VB.NET-Quellcode

    1. Public Function GetExcelfolder() As String
    2. With Application.FileDialog(msoFileDialogFolderPicker)
    3. .AllowMultiSelect = False
    4. .Title = "Bitte Ordner wählen"
    5. .InitialFileName = ""
    6. .InitialView = msoFileDialogViewThumbnail
    7. .ButtonName = "OK"
    8. If .Show = -1 Then
    9. GetExcelfolder = .SelectedItems(1)
    10. End If
    11. End With
    12. End Function
    13. -------------------------------------------------------------------------------
    14. Sub Pdf_erstellen()
    15. i = 3
    16. Anzahl = ThisWorkbook.Sheets.Count
    17. Do
    18. i = i + 1
    19. Dim MyPath As String
    20. MyPath = GetExcelfolder
    21. MsgBox MyPath
    22. If Sheets(i).Range("G2") = "2" Or Sheets(i).Range("G2") = "3" Then
    23. Sheets(i).Activate
    24. ActiveSheet.ExportAsFixedFormat _
    25. Type:=xlTypePDF, _
    26. Filename:=Format(Date, "YYYYMMDD") & "_" & Range("B1").Value & i & ".pdf", _
    27. Quality:=xlQualityStandard, _
    28. IncludeDocProperties:=True, _
    29. IgnorePrintAreas:=False, _
    30. OpenAfterPublish:=False
    31. End If
    32. Loop Until i = Anzahl - 3
    33. Worksheets("Baumstruktur").Activate
    34. End Sub


    Grundsätzlich möchte ich bestimmte Tabellenblätter als pdf in einem auswählbaren Ordner sepeichern...
    Wollte so fürs speichern den Pfad erstellen.
    In deinem Code durchläufst du alle Worksheets und rufst es für jedes Worksheet wieder auf:


    Visual Basic-Quellcode

    1. Do
    2. i = i + 1
    3. Dim MyPath As String
    4. MyPath = GetExcelfolder
    5. MsgBox MyPath
    6. Loop Until i = Anzahl - 3


    Daher kommt es so oft wie du Worksheets hast. Willst du alle in den selben Ordner speichern, dann führe dies einmal VOR der Do Schleife aus.
    Außerdem willst du vermutlich den Pfad auch verwenden oder?

    Visual Basic-Quellcode

    1. Sub Pdf_erstellen()
    2. i = 3
    3. Anzahl = ThisWorkbook.Sheets.Count
    4. Dim MyPath As String
    5. MyPath = GetExcelfolder & "\" 'ans Ende noch ein \
    6. Do
    7. i = i + 1
    8. If Sheets(i).Range("G2") = "2" Or Sheets(i).Range("G2") = "3" Then
    9. 'Du benötigst kein ActiveSheet
    10. ThisWorkbook.Sheets(i).ExportAsFixedFormat _
    11. Type:=xlTypePDF, _
    12. Filename:=MyPath & Format(Date, "YYYYMMDD") & "_" & Range("B1").Value & i & ".pdf", _
    13. Quality:=xlQualityStandard, _
    14. IncludeDocProperties:=True, _
    15. IgnorePrintAreas:=False, _
    16. OpenAfterPublish:=False
    Das ist meine Signatur und sie wird wunderbar sein!
    Nein, nicht nach jedem Worksheet kommt der FileDialog! Wie davor kommt der Dialog, klicke ok, dann kommt sofort wieder der Dialog!

    Ja die Sache mit dem Pfad hab ich noch nicht eingebaut da ich nicht zum Ausschreiben des Pfads komme.
    Das kann nicht sein. Mit dem was du gepostet hast und den Änderungen von mir sollte es passen.
    Entweder du hast die Änderungen nicht korrekt übernommen oder du hast noch weiteren Code der iwie reinfunkt.
    Das ist meine Signatur und sie wird wunderbar sein!
    Mann bin ich bescheuert...

    Ja es funktioniert, vielen Dank für deine Hilfe!!!

    Aaaaber, warum?
    Beim alten Code wäre richtigerweise für jedes Tabellenbaltt die Abfrage gekommen und hätte es danach gespeichert, dies war aber nicht der Fall. War immer in diesem Dialogfeld gefangen.

    Wegen dem fehleden "\" im Pfad??

    Mit F8 bin ich im Code aber gar nie ans Ende der Do schleife gekommen...
    Beim Aufruf der Funktion bielb ich in dieser Schleifer der Funktion stecken.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „BöseSusi“ ()

    Das kann ich dir nicht sagen, ggf. hattest du noch iwas drin was nicht gepostet wurde.
    Du solltest allerdings aufpassen, wenn man im FolderDialog Cancel klickt, dann hast du keinen Pfad bzw der Pfad ist dann nur "\"
    Am besten prüfst du das noch und exportierst dann nicht.

    LG

    //Edit:
    Und am fehlenden \ kann es eher nicht liegen, da du den Pfad ja vorher gar nicht verwendet hast.
    Das ist meine Signatur und sie wird wunderbar sein!
    Ja mit InitialFileName..
    In der Funktion GetExcelfolder wird die Eigenschaft auch verwendet, allerding auf "" gesetzt.

    Setz es so:

    Visual Basic-Quellcode

    1. .InitialFileName = ThisWorkbook.Path


    //Edit:
    Du musst auch beachten, dass der FolderBrowser von Excel einige kleine Eigenheiten hat.So kann man zum Beispiel Computer auswählen, und der Pfad beinhaltet dann nur "Computer"..
    Das ist meine Signatur und sie wird wunderbar sein!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Mono“ ()

    BöseSusi schrieb:

    VB.NET-Quellcode

    1. ...
    2. i = 3
    3. Anzahl = ThisWorkbook.Sheets.Count
    4. ...
    5. Do
    6. i = i + 1
    7. ...
    8. Loop Until i = Anzahl - 3


    Moin, schon ewig alt, aber mir fällt da auf:

    i wird von 3 angefangen hochzuzählen, bis es GLEICH Anzahl-3 ist.
    Also muss Anzahl mindestens 7 sein, damit die Abbruchbedingung auch erreicht wird ;)
    Ansonsten zählt das einfach immer weiter ...

    Gruß, Christian
    Ehm, ja. Dürfte wohl für den hier im Forum nicht mehr existenten TE nicht mehr relevant sein.
    *closed*
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.