Dateiname wird per VBA generiert, wie erweitern?

Peter1984

Grand Admiral Special
Mitglied seit
17.06.2002
Beiträge
4.904
Renomée
17
Standort
Mainfranken
Hi, folgenden Code-Schipsel habe ich von einem Studienkollegen programmiert bekommen:

Code:
Sub businessBill()
    Dim wdObject As Object
    Dim rechnungsnr As String
    Set wdObject = CreateObject("Word.Application")
    wdObject.Visible = False
    wdObject.Documents.Open (Application.ActiveWorkbook.Path & "\Rechnungsvorlage-gewerblich.dotx")
    If (Cells(Application.ActiveCell.Row, 3).Value <> "" And Cells(Application.ActiveCell.Row, 4).Value <> "") Then
        Set wdObject = replaceText(wdObject, "<<line1>>", Cells(Application.ActiveCell.Row, 2))
        Set wdObject = replaceText(wdObject, "<<line2>>", "z.H. " & Cells(Application.ActiveCell.Row, 3) & " " & Cells(Application.ActiveCell.Row, 4))
        Set wdObject = replaceText(wdObject, "<<line3>>", Cells(Application.ActiveCell.Row, 5))
        Set wdObject = replaceText(wdObject, "<<line4>>", Cells(Application.ActiveCell.Row, 6) & " " & Cells(Application.ActiveCell.Row, 7))
    Else
        Set wdObject = replaceText(wdObject, "<<line1>>", Cells(Application.ActiveCell.Row, 2))
        Set wdObject = replaceText(wdObject, "<<line2>>", Cells(Application.ActiveCell.Row, 5))
        Set wdObject = replaceText(wdObject, "<<line3>>", Cells(Application.ActiveCell.Row, 6) & " " & Cells(Application.ActiveCell.Row, 7))
        Set wdObject = replaceText(wdObject, "<<line4>>", "")
    End If
    rechnungsnr = getBillNumber
    Set wdObject = replaceText(wdObject, "<<kdn>>", Cells(Application.ActiveCell.Row, 1))
    Set wdObject = replaceText(wdObject, "<<rnr>>", DatePart("yyyy", Date) & "-" & rechnungsnr)
    Set wdObject = replaceText(wdObject, "<<datum>>", Date)
    wdObject.ActiveDocument.SaveAs (Application.ActiveWorkbook.Path & "\" & DatePart("yyyy", Date) & "-" & rechnungsnr & ".docx")
    wdObject.Visible = True
    incrementBillNumber
End Sub

Die Datei, die generiert wird, hat das Format Jahr-Rechnungsnummer.docx (z.B. 2010-1234.docx).
Es wäre schön, wenn nach der Rechnungsnummer noch der Eintrag aus "<<line1>>" stehen würde, z.b. 2010-1234-Kunde.docx.
Code-Zeile ist müsste die 4. von unten sein.

Kriegs aber leider nicht hin, kann mir bitte jemand kurz auf die Sprünge helfen?

Danke schonmal!
 
EDIT:

Code:
Sub businessBill()
    Dim wdObject As Object
    Dim rechnungsnr As String
    [COLOR="Red"]Dim KNr As String[/COLOR]
    Set wdObject = CreateObject("Word.Application")
    wdObject.Visible = False
    wdObject.Documents.Open (Application.ActiveWorkbook.Path & "\Rechnungsvorlage-gewerblich.dotx")
    If (Cells(Application.ActiveCell.Row, 3).Value <> "" And Cells(Application.ActiveCell.Row, 4).Value <> "") Then
        Set wdObject = replaceText(wdObject, "<<line1>>", Cells(Application.ActiveCell.Row, 2))
        [COLOR="Red"]KNr = Cells(Application.ActiveCell.Row, 2).Value[/COLOR]
        Set wdObject = replaceText(wdObject, "<<line2>>", "z.H. " & Cells(Application.ActiveCell.Row, 3) & " " & Cells(Application.ActiveCell.Row, 4))
        Set wdObject = replaceText(wdObject, "<<line3>>", Cells(Application.ActiveCell.Row, 5))
        Set wdObject = replaceText(wdObject, "<<line4>>", Cells(Application.ActiveCell.Row, 6) & " " & Cells(Application.ActiveCell.Row, 7))
    Else
        Set wdObject = replaceText(wdObject, "<<line1>>", Cells(Application.ActiveCell.Row, 2))
        [COLOR="Red"]KNr = Cells(Application.ActiveCell.Row, 2).Value[/COLOR]
        Set wdObject = replaceText(wdObject, "<<line2>>", Cells(Application.ActiveCell.Row, 5))
        Set wdObject = replaceText(wdObject, "<<line3>>", Cells(Application.ActiveCell.Row, 6) & " " & Cells(Application.ActiveCell.Row, 7))
        Set wdObject = replaceText(wdObject, "<<line4>>", "")
    End If
    rechnungsnr = getBillNumber
    Set wdObject = replaceText(wdObject, "<<kdn>>", Cells(Application.ActiveCell.Row, 1))
    Set wdObject = replaceText(wdObject, "<<rnr>>", DatePart("yyyy", Date) & "-" & rechnungsnr)
    Set wdObject = replaceText(wdObject, "<<datum>>", Date)
    wdObject.ActiveDocument.SaveAs (Application.ActiveWorkbook.Path & "\" & DatePart("yyyy", Date) & "-" & rechnungsnr [COLOR="Red"]& "-" & KNr[/COLOR] & ".docx")
    wdObject.Visible = True
    incrementBillNumber
End Sub

Hmm - So vielleicht!?

Gruß
 
Zuletzt bearbeitet:
Wie du Recht hast!

Problem gelöst, vielen Dank!
 
Abschuss wäre jetzt noch das Tagesdatum im Dateinamen! :D
 
Ändere einfach:
...& "-" & KNr & ".docx" in
...& "-" & KNr & "-" & Date & ".docx"
Das wäre dann ...-24.02.2010.docx

- Hat Dein Kollege ja auch schonmal verwendet. Date macht dasselbe wie "= HEUTE()" in Exceltabellen!

Gruß

EDIT:
Wobei ich irgendwie Unterstriche statt Bindestrichen nehmen würde - aber das kannst Du ja bei Bedarf beliebig anpassen!
Das System bleibt ja immer gleich: in *" "* kommt der Text / *ohne " "* dann die Variablen (Deine oder Programmeigene wie Date) / dann einfach den Plunder mit *&* verbinden!
 
Zuletzt bearbeitet:
Danke! :)

Man lernt halt einfach nicht aus - ist aber auch gut so!
 
Danke! :)

Man lernt halt einfach nicht aus - ist aber auch gut so!

Das stimmt - hab schon mehr als einmal in die Tastatur gebissen weil mit VBA irgendetwas mal wieder nicht gefunzt hat! 8-(

Aber mit solchen kleinen Programmen lernt man das wesentlich besser als mit Büchern oder in Vorträgen! - Immer ordentlich rumprobieren! ;)

Gruß
 
Wie würde es dann auf englischen Systemen am besten gelöst?
 
Auf englischen Systemen führt das zu Problemen, da dann Slashes im Dateinamen auftauchen.

Wie auf der Arbeit! :P
Stimmt aber leider. Mal abgesehen von den Versionsproblemen kann man selbst bei kleinsten Schlupflöchern im Code davon ausgehen, daß der DAU-Kollege gegenüber die Datei zerschießt! ;D

Wie würde es dann auf englischen Systemen am besten gelöst?


Mach's z.B. halt so:

...& "_" & Format(Date, "DD_MM_YYYY") & ".docx"

Im Roten kannst Du das Format dann exakt nach Deinem Gusto ändern (Binde- statt Unterstriche / 10 statt 2010 usw.)! ;)

Gruß
 
Zuletzt bearbeitet:
Zurück
Oben Unten