MS Office 2016, Windows 10
Hi,
ich hab ein Rechnungserstellungsmakro, das meine Kundendaten (Name, Adresse, ...) aus einer Excel Tabelle liest und eine Word-Rechnungsvorlage damit ausfüllt und so Rechnungen erstellt. Das geschieht (so viel ich verstanden habe) mit Mailmerge. Das Makro starte ich aus der Excel Tabelle heraus.
Problem: Ein Feld funktioniert nicht richtig, nämlich die Straßen/Haus-Nummer. In der finalen Rechnung steht eine Zahl, die wie ein Datum aussieht, obwohl die entsprechenden Zellen in der Excel-Tabelle als TEXT formatiert sind. Ein Beispiel:
Excel enthält die Zahl 20 in der entsprechenden Zelle und diese Zelle ist als Text formatiert. Raus kommt in der Rechnung dann "1/20/1900".
Das Feld in der Word-Vorlage heisst {MERGEFIELD ClientStreetNr}
Ich bin mir nicht sicher welcher VBA-code für die Befüllung dieser Felder zuständig ist, vielleicht dieser hier?
Public Sub DoMailMerge(wdDoc As Word.Document, strSource As String, Optional recNum As Long)
'Note: A VBA Reference to the Word Object Model is required, via Tools|References
With wdDoc
With .MailMerge
.OpenDataSource Name:=strSource, _
ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
Format:=wdOpenFormatAuto, Connection:= _
"Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=" & strSource & ";Mode=Read;" & _
"Extended Properties=""HDR=YES;IMEX=1;", _
SQLStatement:="SELECT * FROM `Data$`", SQLStatement1:="", SubType:= _
wdMergeSubTypeAccess
'SQLStatement:="SELECT * FROM `Report1$`", SQLStatement1:="", SubType:= _
'SQLStatement:="SELECT * FROM `Report1$` WHERE Line = '1'", SQLStatement1:="", SubType:= _
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
If recNum <> 0 Then
.FirstRecord = recNum 'wdDefaultFirstRecord '
.LastRecord = recNum 'wdDefaultLastRecord '
Else
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End If
'While .RecordCount < .LastRecord
'WaitingNow 1
'Debug.Print .ActiveRecord
'Wend
End With
'Excecute the merge
.Execute
End With
End With
End Sub
|