|  
                                             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 
  
     |