Makro speichern als .pdf mit Filenamen aus Feld speichert unter falschem Namen

205 Aufrufe
Gefragt 16, Feb 2017 in Tabellenkalkulation von Nebroht
Hallo Fachleute,

ich habe folgendes Problem:

Mein Makro funktioniert genauso, wie ich es brauche, bis auf die Tatsache, dass der Dateiname, den ich ebenfalls automazisch erstellen lasse. Der Inhalt des Dokumentes ist immer eine Nr. zurück zum Filenamen.
Beispiel:
Ich möchte eine Datei mit dem Namen: 4955-Text-201701-1400002.pdf erzeugen. 1400002 wird aus einer Reihe kopiert und löst die Erstellung eines Reports im 1.Tabellenblatt aus. Die Datei die dann erzeugt wird, hat jedoch den Namen: 4955-Text-201701-1400001.pdf mit dem Inhalt/ Report 1400002 an.

Wo habe ich meinen Fehler gemacht?

Hier der Makro:
Sub Macro2()
'
' Macro2 Macro
' copy customer-ID & pdf-safe
'

'
Dim i As Long
Dim fileName As String
Dim customerID As String
Dim lAnzahl As String
lAnzahl = InputBox("Wie oft soll das Makro laufen ?", , 3)

MsgBox "Erstellung Sell-Out-PDF Reports für 4903. Laufzeit: ca. 60 Minuten/ 1000 *.pdf"
For i = 1 To lAnzahl
Sheets("pdf-maker").Select
fileName = Range("F19")
'Range("B202").Select
customerID = Cells(i, 2)
'Application.CutCopyMode = False
'Selection.Copy
Sheets("Sell-Out Datei").Select
Range("F5") = customerID
'MsgBox fileName
speichern_unter (fileName)
Next i
End Sub


Sub speichern_unter(f As String)
'MsgBox f
'Sheets("Sell-Out Datei").Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, fileName:= _
ThisWorkbook.Path & "\" & f & ".pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
False
End Sub



Herzlichen Dank

7 Antworten

0 Punkte
Beantwortet 16, Feb 2017 von m-o Profi (11,067 Punkte)
Hallo,

ohne die Datei zu kennen, ist es schwer den Fehler zu finden. Du ermittelst den Dateinamen ja aus der Zelle F19 im Blatt pdf-maker. Was steht da drin bzw. wie wird dort der Dateiname zusammengesetzt?

Gruß

M.O.
0 Punkte
Beantwortet 16, Feb 2017 von nebroht
Hallo,

Der Dateame wird wie folgt zusammengebaut:
=(H14&G14&K14&J14&L14&I14)
wobei in
H14= 4903
G14=Sell-out
K14=2017
J14=01
L14= "-"
i14= 140000
i14 wird vom Tabellenblatt Sell-out-Datei kopiert
K & J14 sind Pagedown Listen
0 Punkte
Beantwortet 16, Feb 2017 von m-o Profi (11,067 Punkte)
Hallo,

und wie wird I14 kopiert? Per Makro? Denn hier ist ja wohl der Fehler mit dem falschen Dateinamen.

Gruß

M.O.
0 Punkte
Beantwortet 16, Feb 2017 von nebroht
Hallo,

nein, das ist einfach ein Verweis auf den Zellnamen
='Sell-Out Datei'!F5 im Feld pdf-maker i14.

beim ausführen der Einzelschritte werden die Werte auch korregt übertragen.

Was ich aber gerade noch gesehen habe, beim ausführen wird im 1. Durchlauf eine pdf-Datei erzeugt die leer ist, sprich der Reprot Inhalt ist nicht vorhanden i14, enthält zu diesen Zeitpunkt, den letzten Wert, des letzten Laufes, gerade z.B. 14000094. Dann wird im 2. Durchlauf der Schleife eine Datei erzeugt inder i14 leer ist und diese enthält dann, den Report 14000001.

Ok es passiert folgendes:
das Feld auf dem Blatt Sell-out F5 enthält keinen Wert. Damit ist das Feld I14 auf dem Blatt pdf-maker 0
Der Makro läuft los und erzeugt zu allererst eine Datei mit dem 4903-SEll-out-201701-0.
Mit der 1. Schleifenwiederholung wird Sell-out F5 zu 14000001.
Blatt pdf-maker enthält dann in F14 den Wert 14000001, also so wie gewollt.
Aber die Erzeugte PDF-Datei heisst dann nur 4903-Sell-out-201701-
Mit dem nächsten Durchlauf, wird dann Sell-out F5 zu 14000002 und pdf-maker F14 zu 14000002 und der Dateiname dann 14000001.

grummel
wiso zieht er einmal nicht den Namen richtig an

Danke
nebroht
0 Punkte
Beantwortet 16, Feb 2017 von nebroht
Habe noch etwas gefunden und da scheint die Ursache zu liegen, habe aber keine Lösung:


Sub speichern_unter(F As String)
'MsgBox f
'Sheets("Sell-Out Datei").Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, fileName:= _
ThisWorkbook.Path & "\" & F & ".pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
False
End Sub


Nachdem ich gerade einfach einmal die Dateinamneserstellung nur noch auf die Übernahme des Zahlenwertes reduziert habe, hier 14000001, läuft der Makro im zweiten durchlauf auf einen Fehler. Es steht zwar der korrekte Wert im Feld, aber der wird nicht angezogen. Hat jemand eine Idee, wie ich es hinbekomme, das die Übernahme sofort erfolgt. Ein Wait Eintrag hat leider nichts gebracht.

Achja, und die Testläufe Anfang des Monats waren alle korregt. Es gab aber auch seitdem keine Änderung an der Excel Datei und auch nicht am Makro.
0 Punkte
Beantwortet 16, Feb 2017 von m-o Profi (11,067 Punkte)
Hallo,

wie sieht denn deine Spalte B im Blatt PDF-maker aus? Denn von hier aus kopierst du ja die Customer-IDs in Zelle F5 des Arbeitsblatts Sell-out-datei. Wenn die erste Zeile leer ist, wird dann natürlich im ersten Durchgang mit deinem Code auch keine Costumer-ID gezogen. Außerdem kopierst du die Costumer-ID erst nachdem du den Namen aus F19 gelesen hast.

Probier es mal so (ich habe die zwei Makros zusammengefasst):

Sub Macro2()
'
' Macro2 Macro
' copy customer-ID & pdf-safe

'

Dim i As Long
Dim fileName As String
Dim lAnzahl As String

lAnzahl = InputBox("Wie oft soll das Makro laufen ?", , 3)

MsgBox "Erstellung Sell-Out-PDF Reports für 4903. Laufzeit: ca. 60 Minuten/ 1000 *.pdf"

For i = 1 To lAnzahl
With Worksheets("pdf-maker")
Worksheets("Sell-Out Datei").Range("F5") = .Cells(i + 1, 2)
fileName = .Range("F19")
End With
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, fileName:= _
ThisWorkbook.Path & "\" & fileName & ".pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False

Next i

End Sub


Gruß

M.O.
0 Punkte
Beantwortet 16, Feb 2017 von nebroht
Hallo M.O.

super Danke, das funktioniert. Genau wie es sein soll.

LG
nebroht
...