Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Dynamischer Pfad & Dateiname im Makro

Dynamischer Pfad & Dateiname im Makro
01.11.2012 14:24:13
Nik
Hallo zusammen...
mit der Makroschleife von Tino bin ich schonmal arg weitergekommen. Nochmals herzlichen DANK! :-) Jetzt hätte ich noch ein Nice-to-Have, dass ich gerne umsetzen würde:
Und zwar würde ich die Rechnung jeweils gerne als PDF abspeichern; der Code würde so aussehen:
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\Daten\Vereinsdaten Rechnung.pdf", Quality:=xlQualityStandard _
, IncludeDocProperties:=True, IgnorePrintAreas:=False, From:=1, To:=1, _
OpenAfterPublish:=True
Kann ich den Pfad, als auch den Dateinamen irgendwie aus dem Excelfile auslesen und oben in den Code übernehmen?
Der Pfad steht in der Zelle K1 und der zu generierende Dateinamen wird in in K2 errechnet.
Das in die Schleife einbauen würde ich hinbekommen, aber bezüglich der Variablen stehe ich etwas auf dem Schlauch...:-(
Vielen lieben Dank und Gruss
Nik

Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dynamischer Pfad & Dateiname im Makro
01.11.2012 14:27:57
{Boris}
Hi,
ungetestet:
Const sPfad As String = "C:\Daten"
Const sName As String = "Vereinsdaten Rechnung.pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
sPfad & "\" & sName, Quality:=xlQualityStandard _
, IncludeDocProperties:=True, IgnorePrintAreas:=False, From:=1, To:=1, _
OpenAfterPublish:=True
Die Variablen sPfad und sName dann natürlich nicht konstant, sondern via Zellbezug befüllen.
VG, Boris

Anzeige
AW: Dynamischer Pfad & Dateiname im Makro
01.11.2012 15:28:23
Nik
Hallo Boris,
ich stehe noch etwas auf dem Schlauch...hab eine Fehlermeldung grad in der ersten Zeile mit dem spfad, den er sich aus der Zelle K1 lesen soll...
Const sPfad As String = Range("K1")
Const sName As String = Range("K2")
Dim n&, nn&, MerkWert
With Application
.ScreenUpdating = False
.EnableEvents = False
With Worksheets("Rechnung")
nn = Range(.Shapes("Listenfeld 3").DrawingObject.ListFillRange).Rows.Count
MerkWert = .Range("O1").Value
End With
For n = 1 To nn
Worksheets("Rechnung").Range("O1") = n
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
sPfad & "\" & sName, Quality:=xlQualityStandard _
, IncludeDocProperties:=True, IgnorePrintAreas:=False, From:=1, To:=1, _
OpenAfterPublish:=True
Next n
End With
Worksheets("Rechnung").Range("O1").Value = MerkWert
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub
Könntest Du mal kurz draufschauen? Vielen lieben Dank und Gruss
Nik

Anzeige
AW: Dynamischer Pfad & Dateiname im Makro
01.11.2012 16:03:37
{Boris}
Hi,
Const sPfad As String = Range("K1")
Const sName As String = Range("K2")

Eine Konstante ist eben eine Konstante. Das hatte ich nur der Einfachheit halber so gepostet.
Mit den Zellzuweisungen musst Du die Variablen "normal" deklarieren und dann entsprechen so zuweisen:
Dim sPfad As String
Dim sName As String
sPfad = Range("K1")
sName = Range("K2")
VG, Boris

Anzeige
AW: Dynamischer Pfad & Dateiname im Makro
02.11.2012 09:05:44
Nik
Schönen guten Morgen zusammen,
gestern hatten mir Tino und Boris hilfreich unter die Arme gegriffen, aber irgendwie schnalle ich es nicht so wirklich... Der folgende Code, der eigentlich zig PDF`S (Pfad und Dateinamen soll jeweils aus K1 und K2 gelesen werden) abspeichern soll macht zwar was, aber es ist nur das PDF der letzten Person im Dropdown abgespeichert. Eine Fehlermeldung erfolgt nicht, aber der Ordner enthält jeweils nur das eine PDF der letzten Person des Dropdowns...:-(
Sub PDF()
Dim sPfad As String
Dim sName As String
sPfad = Range("K1")
sName = Range("K2")
Dim n&, nn&, MerkWert
With Application
.ScreenUpdating = False
.EnableEvents = False
With Worksheets("Rechnung")
nn = Range(.Shapes("Listenfeld 3").DrawingObject.ListFillRange).Rows.Count
MerkWert = .Range("O1").Value
End With
For n = 1 To nn
Worksheets("Rechnung").Range("O1") = n
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
sPfad & "\" & sName, Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
From:=1, To:=1, OpenAfterPublish:=False
Next n
End With
Worksheets("Rechnung").Range("O1").Value = MerkWert
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub

Seht ihr spontan einen Fehler?
Vielen lieben Dank und Gruss
Nik

Anzeige
AW: Dynamischer Pfad & Dateiname im Makro
02.11.2012 10:37:08
{Boris}
Hi Nik,
Seht ihr spontan einen Fehler?
Natürlich. Zu Beginn weist Du den Variablen sPfad und sName den Inhalt der Zellen K1 bzw. K2 zu - und diesen Inhalt behalten die Variablen bis zum Ende des Makros (und somit natürlich auch in Deiner Schleife, die damit permanent die selbe PDF-Datei erzeugt).
Aber mangels genauerer Kenntnis Deines Dateiaufbaus kann ich nicht mehr dazu sagen.
VG, Boris

Anzeige
AW: Dynamischer Pfad & Dateiname im Makro
02.11.2012 11:30:00
Nik
Hallo Boris,
vielen lieben Dank für Dein Feedback! Folgendes:
In der Zelle K1 ist der Pfad hinterlegt, der für alle Vereinsrechnungen gleich bleibt, sprich hierher sollen alle Vereinsrechnungen abgespeichert werden.
In der Zelle K2 errechne in einer Formel den Dateinamen, sprich Jahresrechnung & Name.
In der Zelle O1 wird der Wert des Dropdowns wiedergegeben, sprich wenn im Dropdown/ Listenfeld der 2. Name ausgewählt ist steht in der Zelle O1 der Wert 2.
Mit folgendem Code:
With Worksheets("Rechnung")
nn = Range(.Shapes("Listenfeld 3").DrawingObject.ListFillRange).Rows.Count
MerkWert = .Range("O1").Value
End With
sollen erstmal die Anzahl von Einträgen im Dropdown ausgelesen werden und die Schleife eben dementsprechend oft ablaufen lassen. Aber eben, er speichert mir immer nur den letzten Eintrag :-( Und ich schnall nicht warum...
Ist das ein wenig verständlicher erklärt? Vielen lieben Dank!
Gruss
Nik

Anzeige
AW: Dynamischer Pfad & Dateiname im Makro
02.11.2012 13:58:43
Nik
Hallo Boris,
vielen lieben Dank für Dein Feedback! Folgendes:
In der Zelle K1 ist der Pfad hinterlegt, der für alle Vereinsrechnungen gleich bleibt, sprich hierher sollen alle Vereinsrechnungen abgespeichert werden.
In der Zelle K2 errechne in einer Formel den Dateinamen, sprich Jahresrechnung & Name.
In der Zelle O1 wird der Wert des Dropdowns wiedergegeben, sprich wenn im Dropdown/ Listenfeld der 2. Name ausgewählt ist steht in der Zelle O1 der Wert 2.
Mit folgendem Code:
With Worksheets("Rechnung")
nn = Range(.Shapes("Listenfeld 3").DrawingObject.ListFillRange).Rows.Count
MerkWert = .Range("O1").Value
End With
sollen erstmal die Anzahl von Einträgen im Dropdown ausgelesen werden und die Schleife eben dementsprechend oft ablaufen lassen. Aber eben, er speichert mir immer nur den letzten Eintrag :-( Und ich schnall nicht warum...
Ist das ein wenig verständlicher erklärt? Vielen lieben Dank!
Gruss
Nik

Anzeige
AW: Dynamischer Pfad & Dateiname im Makro
02.11.2012 16:18:48
{Boris}
Hi Nik,
Aber eben, er speichert mir immer nur den letzten Eintrag :-( Und ich schnall nicht warum...
Nochmal: Im Code selbst hast Du ZU BEGINN die Variablen mit den Werten aus K1 bzw. K2 gefüllt - und damit haben die Variablen solange diese Werte, bis Du ihnen neue zuweist. Und genau diese Neuzuweisung erfolgt in Deinem bisherigen Code nicht - daher bleibt der Dateiname immer der Selbe, und zwar genau so, wie er mit Deiner
In der Zelle K2 errechne in einer Formel den Dateinamen, sprich Jahresrechnung & Name.
ermittelt wurde.
Da ich aber weder Deine Datei noch die Formel aus K2 kenne, kann ich Dir bis dahin nicht mehr sagen - sorry.
VG, Boris

Anzeige
AW: Dynamischer Pfad & Dateiname im Makro
03.11.2012 10:08:05
Nik
Hallo zusammen,
sorry, es ist in der Tat etwas schwierig in Worten zu fassen was das Problem ist und somit natürlich fast unmöglich eine Lösung zu finden. Deshalb anbei das File, in dem das Problem, sprich das Makro PDF ersichtlich ist:
https://www.herber.de/bbs/user/82461.xls
In Zelle K1 und K2 auf dem Sheet "Rechnung" sind wie gesagt der Pfad und der Dateiname (errechnet) hinterlegt. Das Makro sollte jeweils alle Einträge im Dropdown (hier können jeweils alle Namen ausgewählt werden) abarbeiten und die Rechnungen im Pfad (Zelle K1) mit dem dazugehörigem Dateinamen (Zelle K2 berechnet) abspeichern. Allerdings wird nur die Rechnung des letzten Eintrages im Dropdown abgespeichert (wie das Boris auch schon gleich im Code gesehen hat..)
Was mache ich falsch? Achja, Excel ist auf automatische Berechnung gestellt, bezüglich des Dateinamens.
Gruss
Nik

Anzeige
AW: Dynamischer Pfad & Dateiname im Makro
03.11.2012 11:03:51
{Boris}
Hi Nik,
so geht`s zum Beispiel:
Sub PDF()
Dim x As Long
Dim sPfad As String
sPfad = Worksheets("Rechnung").Range("K1")
For x = 1 To Worksheets("Datenbank Aktiv").Range("B101").End(xlUp).Row - 3
Worksheets("Rechnung").Range("O1") = x
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
sPfad & "\" & Worksheets("Rechnung").Range("K2"), Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
From:=1, To:=1, OpenAfterPublish:=False
Next x
End Sub
VG, Boris

Anzeige
AW: Dynamischer Pfad & Dateiname im Makro
03.11.2012 11:36:31
Nik
Wooow...SUPER :-) Vielen herzlichen DANK! Es funktioniert und ich kann gar nicht sagen wieviel Zeit mir das jetzt spart! Ich weiss gar nicht wie ich danken soll!
Also vielen lieben Dank und ein schönes Weekend!
Gruss
Nik

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Dynamischer Pfad und Dateiname im Excel-Makro


Schritt-für-Schritt-Anleitung

Um einen dynamischen Pfad und Dateinamen in einem Excel-Makro zu verwenden, kannst Du die folgenden Schritte befolgen:

  1. Zellen vorbereiten:

    • Stelle sicher, dass in Zelle K1 der Pfad gespeichert ist, in dem die PDFs abgelegt werden sollen (z.B. C:\Daten).
    • In Zelle K2 sollte die Formel stehen, die den gewünschten Dateinamen generiert (z.B. Jahresrechnung & Name).
  2. Makro erstellen:

    • Öffne den VBA-Editor mit ALT + F11.
    • Füge ein neues Modul hinzu und kopiere den folgenden Code hinein:
    Sub PDF()
       Dim sPfad As String
       Dim sName As String
       Dim n As Long, nn As Long
       Dim MerkWert As Variant
    
       sPfad = Worksheets("Rechnung").Range("K1").Value
       nn = Worksheets("Rechnung").Range(.Shapes("Listenfeld 3").DrawingObject.ListFillRange).Rows.Count
       MerkWert = Worksheets("Rechnung").Range("O1").Value
    
       With Application
           .ScreenUpdating = False
           .EnableEvents = False
       End With
    
       For n = 1 To nn
           Worksheets("Rechnung").Range("O1").Value = n
           sName = Worksheets("Rechnung").Range("K2").Value
           ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
               sPfad & "\" & sName, Quality:=xlQualityStandard, _
               IncludeDocProperties:=True, IgnorePrintAreas:=False, _
               From:=1, To:=1, OpenAfterPublish:=False
       Next n
    
       Worksheets("Rechnung").Range("O1").Value = MerkWert
    
       With Application
           .EnableEvents = True
           .ScreenUpdating = True
       End With
    End Sub
  3. Makro ausführen:

    • Schließe den VBA-Editor und gehe zurück zu Excel.
    • Führe das Makro aus, um die PDFs zu erstellen.

Häufige Fehler und Lösungen

  • Fehler: Nur das letzte PDF wird gespeichert:

    • Ursache: Die Variablen sPfad und sName behalten den Wert von K1 und K2 während der Schleife. Um dies zu ändern, stelle sicher, dass sName innerhalb der Schleife zugewiesen wird, wie im obigen Code gezeigt.
  • Fehler: Makro läuft nicht:

    • Stelle sicher, dass die Makros in Excel aktiviert sind. Gehe zu Datei -> Optionen -> Trust Center -> Einstellungen für das Trust Center -> Makroeinstellungen und aktiviere die entsprechenden Optionen.

Alternative Methoden

Anstatt Zellen für den Pfad und den Dateinamen zu verwenden, kannst Du auch Eingabefelder in einem UserForm erstellen, um den Pfad und den Namen dynamisch festzulegen. So kannst Du die Benutzerinteraktion verbessern und die Eingabefelder direkt im Makro nutzen.


Praktische Beispiele

Hier ist ein Beispiel für die Anwendung des Codes:

  1. Wenn in Zelle K1 der Pfad C:\Daten\Vereinsrechnungen steht und in K2 der Name Rechnung_Januar.pdf:
    • Das Makro speichert die PDFs im Ordner C:\Daten\Vereinsrechnungen mit den entsprechenden Namen, die in K2 berechnet werden.

Tipps für Profis

  • Überlege, Fehlerbehandlungen in Dein Makro einzufügen, um sicherzustellen, dass es bei ungültigen Pfaden oder Dateinamen nicht abstürzt.
  • Nutze Debug.Print in Deinem Code, um den Status und die Werte von Variablen während der Ausführung zu überwachen.

FAQ: Häufige Fragen

1. Wie kann ich den Pfad dynamisch ändern? Du kannst eine InputBox verwenden, um den Benutzer nach dem gewünschten Pfad zu fragen und diesen in sPfad zu speichern.

2. Was mache ich, wenn der Dateiname bereits existiert? Du kannst prüfen, ob die Datei bereits vorhanden ist, und den Dateinamen entsprechend anpassen, um Überschreibungen zu vermeiden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige