Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1924to1928
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Makro als Modul

Makro als Modul
05.04.2023 11:34:03
beanbear

Hallo, ich hab im Netz ein Makro gefunden, mit dem ich aus einer Exceldatei heraus Serienbriefe mit Word erzeugen kann. Nun das Makro funktioniert super. Word startet und füllt mir die Felder aus. Nun habe ich das Makro als Modul in eine Personal.xlsb gepackt, damit ich es immer bei Neustart von Excel zur Verfügung habe. Nun startet zwar Word, aber die Felder werden mit nicht ausgefüllt und im Makro wird mir der Befehl: .Execute Pause:=False angezeigt. Kann mir bitte jemand helfen das Problem zu lösen?? Bin KEIN VBA Profi darum bitte ich mir das verständlich zu erklären. Dank Euch gleich mal... VG beanbear

Sub Serienbrief()
'https://www.ms-office-forum.net/forum/showthread.php?t=251123
  Dim oWord As Object
  Dim oDoc As Object
  Dim strLaufwerkDateiname As String

  'Serienbrief Dateiname
  strLaufwerkDateiname = "C:\Temp\Serienbrief.docx"

  Set oWord = CreateObject("word.application")
  Set oDoc = oWord.Documents.Open(strLaufwerkDateiname)

  oWord.Visible = True
  oWord.Application.Activate 'Dokument wird in den Vordergrund geholt
  oDoc.MailMerge.MainDocumentType = 0 'wdFormLetters = 0. Gibt einen Typ von Seriendruckdokument an.
  oDoc.MailMerge.OpenDataSource Name:=ThisWorkbook.FullName _
  , ConfirmConversions:=False, LinkToSource:=True, Connection:= _
  "Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=" & _
  ThisWorkbook.FullName & _
  ";Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Je" _
  , SQLStatement:="SELECT * FROM `Tabelle1$`", SQLStatement1:="", SubType:=1

  With oDoc.MailMerge
    'wdSendToNewDocument  = 0. Die Ergebnisse werden aus dem Serienbrief in ein neues Dokument übertragen.
    .Destination = 0
    'Wenn Seriendruckfelder leer sind, werden die leere Zeilen im Seriendruckdokument unterdrückt.
    .SuppressBlankLines = True

    With .DataSource
      'wdDefaultFirstRecord = 1. Aus dem Hauptdokument mit den Datensätzen 1 bis
      .FirstRecord = 1
      'wdDefaultLastRecord = -16. Zum letzten Datensatz zusammengeführt
      .LastRecord = -16
    End With
    .Execute Pause:=False                            >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>   FEHLER
  End With
  'Das Seriendruckdokument wird ohne Speichern geschlossen
  oDoc.Close SaveChanges:=0
  Set oDoc = Nothing
  Set oWord = Nothing
End Sub


8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro als Modul
05.04.2023 11:51:13
Daniel
Hi
ich vermute mal, der Fehler liegt hier:

oDoc.MailMerge.OpenDataSource Name:=ThisWorkbook.FullName, ...

Thisworkbook ist immer die Datei, die das Makro enthält und das wäre bei dir jetzt die Personal.xlsb und die enthält wahrscheinlich keine passenden Daten.
Probiers mal mit ActiveWorkbook anstelle von ThisWorkbook
wenn das nicht funktioniert, weil du Word aktiviert hast, dann speichere dir am Anfang des Makros die aktive Datei in eine Variable und verwende diese:

Sub Serienbrief()
'https://www.ms-office-forum.net/forum/showthread.php?t=251123
  Dim oWord As Object
  Dim oDoc As Object
  Dim strLaufwerkDateiname As String
  Dim WB as workbook
  Set WB = ActiveWorkbook
  ...
  oDoc.MailMerge.OpenDataSource Name:=WB.FullName _
  ...
Gruß Daniel


Anzeige
AW: Makro als Modul
05.04.2023 12:15:11
beanbear
Hi Daniel, das funktioniert ja schon mal megasuper!!! Vielen Dank Dir gleich mal. Was noch stört und was ich nicht verstehe, jetzt erscheint dann ein Dialog wo die entsprechende Tabelle verlangt wird. Meine Tabelle heißt Tabelle1 - woher kommt die Anzeige: Tabelle15 ??


AW: Makro als Modul
05.04.2023 14:55:58
beanbear
@Daniel: Hi Daniel, habs nun mit Deinem Code hinbekommen. Dennoch an alle herzlichen Dank!!!!!! Toll solche Helferlein zu haben. VG beanbear


AW: Makro als Modul
05.04.2023 12:22:22
snb
Dieser Code reicht shon:

Sub M_snb()
  With GetObject("C:\Temp\Serienbrief.docx").Mailmerge
     .MainDocumentType = 0
     .OpenDataSource ActiveWorkbook.FullName, SQLStatement:="SELECT * FROM `Tabelle1$`"
     .Destination = 0
     .SuppressBlankLines = True
    .Execute False
    .Parent.Close 0
  End With
End Sub


Anzeige
AW: Makro als Modul
05.04.2023 12:52:10
beanbear6
Hallo snb, da verlangt er jetzt SQL Select from Adressen$. Wie kann ich denn zum Text einen Screen und/oder mehrere Dateien mit schicken? bin wohl zu doof dafür. :-)


AW: Makro als Modul
05.04.2023 13:12:45
snb
Mach es so:

Sub M_snb()
  With GetObject("C:\Temp\Serienbrief.docx").Mailmerge
     .MainDocumentType = 0
     .OpenDataSource ActiveWorkbook.FullName, SQLStatement:="SELECT * FROM `Adressen$`"
     .Destination = 0
     .SuppressBlankLines = True
    .Execute False
    .Parent.Close 0
  End With
End Sub


AW: Makro als Modul
05.04.2023 15:29:58
snb
Ich speichere Mappe2.xlsm in G:\OF\Mappe2.xlsm.

Ich öffne Serienbrief.docx.
Ich verbinde die Serienbrief.docx zu G:\OF\Mappe2.xlsm.
Ich Speichere Serienbrief.docx in "G:\OF\Serienbrief.docx.
Ich Schliesse Serienbrief.docx

Nun kan ich im Personal.xlsb oder in Mappe2 oder beliebig irgendwo diese Makro starten:

Sub M_snb()
  With GetObject("G:\OF\Serienbrief.docx").Mailmerge
    .Execute False
    .Parent.Close 0
  End With
End Sub
Und dann zeigt Word alle erstellte Briefe.
Mehr brauchst du nicht.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige