Thema Datum  Von Nutzer Rating
Antwort
Rot Serienbrief erstellen mit Anhang
03.11.2020 11:03:32 Eyyub
NotSolved

Ansicht des Beitrags:
Von:
Eyyub
Datum:
03.11.2020 11:03:32
Views:
981
Rating: Antwort:
  Ja
Thema:
Serienbrief erstellen mit Anhang

Hallo alle Zusammen,

ich habe hier ein Makro, das leider nicht so funktioniert, wie ich es mir wünsche. 

Ich habe ein Makro, mit dem ich Serienbriefe erstellen kann. Das funktioniert auch. Code füge ich noch ein.

Dann habe ich ein Makro, mit dem ich erfolgreich eine Tabelle aus einer externen Excel-Tabelle auf eine zweite Seite importieren kann. Funktioniert auch.

Jetzt versuche ich, beides zu kombinieren. Er fügt die Tabelle erfolgreich ein, zerschießt jedoch die eigentliche Rechnung, welche aus dem Serienbrief erstellt wird.

Hier der Code:

Sub WORDspeichern()
    ' set variables
    Dim iBrief As Integer, sBrief As String
    Dim AppShell As Object
    Dim BrowseDir As Variant
    Dim Path As String
   
    ' catch any errors
    On Error GoTo ErrorHandling
   
    ' determine path
    Set AppShell = CreateObject("Shell.Application")
    Set BrowseDir = AppShell.BrowseForFolder(0, "Speicherort für Serienbriefe auswählen", 0, (strStartPath))
   
    If BrowseDir = "Desktop" Then
        Path = CreateObject("WScript.Shell").SpecialFolders("Desktop")
    Else
        Path = BrowseDir.items().Item().Path
    End If
   
    If Path = "" Then GoTo ErrorHandling
       
    Path = Path & "\Rechnungen-" & Format(Now, "dd.mm.yyyy-hh.mm.ss") & "\"
    MkDir Path
   
    On Error GoTo ErrorHandling
       
    ' hide application for better performance
    MsgBox "WATERcontrol Rechnungen werden einzeln als WORD-Dateien exportiert!", vbOKOnly + vbInformation
'    Application.Visible = False
    
    ' create bulkletter and export as pdf
    With ActiveDocument.MailMerge
        .DataSource.ActiveRecord = 1
        Do
            .Destination = wdSendToNewDocument
            .SuppressBlankLines = True
            With .DataSource
                .FirstRecord = .ActiveRecord
                .LastRecord = .ActiveRecord
                CreateAnlage
                sBrief = Path & "2020-" & .DataFields("RECHNUNG").Value & ".doc"
            End With
            .Execute Pause:=False
       
            If .DataSource.DataFields("RECHNUNG").Value > "" Then
                ActiveDocument.SaveAs FileName:=sBrief
            End If
            ActiveDocument.Close False
       
            If .DataSource.ActiveRecord < .DataSource.RecordCount Then
                .DataSource.ActiveRecord = wdNextRecord
            Else
                Exit Do
            End If
        Loop
    End With
   
    ' error handling
ErrorHandling:
    Application.Visible = True
 
    If Err.Number = 76 Then
        MsgBox "Der ausgewählte Speicherort ist ungültig", vbOKOnly + vbCritical
    ElseIf Err.Number = 5852 Then
        MsgBox "Das Dokument ist kein Serienbrief"
    ElseIf Err.Number = 4198 Then
        MsgBox "Der ausgewählte Speicherort ist ungültig", vbOKOnly + vbCritical
    ElseIf Err.Number = 91 Then
        MsgBox "Exportieren von Rechnungen abgebrochen", vbOKOnly + vbExclamation
    ElseIf Err.Number > 0 Then
        MsgBox "Unbekannter Fehler: " & Err.Number & " - Bitte Makro erneut ausführen.", vbOKOnly + vbCritical
    Else
        MsgBox "Rechnungen erfolgreich exportiert", vbOKOnly + vbInformation
    End If

End Sub

Sub CreateAnlage()
Dim rng As Range
Set rng = Selection.Bookmarks("\Page").Range
rng.SetRange rng.End, rng.End
rng.Select
Selection.InsertBreak Type:=wdPageBreak
Selection.Orientation = wdTextOrientationVertical
Set rng = Nothing
importFromExcel
End Sub

Private Sub importFromExcel()

Dim exTab As Object
Dim strPath As String
Dim strPath2 As String
Dim rngPrintArea As Excel.Range
Dim iRow, iColumn As Integer
Dim einfuegeBereich As Range
Dim WordTable As Word.Table

strPath = "C:\Users\EA.Alici\Documents\TabelleUbersicht2.xlsx"
strPath2 = ActiveDocument.Path & "\anlagen_excel\20373.xlsx"


Set exTab = CreateObject("excel.application")
'exTab.workbooks.Open strPath
exTab.Workbooks.Open strPath2
exTab.Visible = True
'exTab.WorkSheets("Liste Programme und Computer").Activate
exTab.Worksheets("AnlagenTab").Activate
iRow = exTab.Worksheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row
iColumn = exTab.Worksheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Column
exTab.Range(Cells(1, 1), Cells(iRow, iColumn)).Select
exTab.Range(Cells(1, 1), Cells(iRow, iColumn)).Copy
'Textmarker
'Seitenumbruch
'Set einfuegeBereich = ActiveDocument.Range(ActiveDocument.Range.End - 1, ActiveDocument.Range.End)
'einfuegeBereich.Paste
ActiveDocument.Activate
Selection.Paste
Set WordTable = ActiveDocument.Tables(ActiveDocument.Tables.Count)

ActiveDocument.Tables(ActiveDocument.Tables.Count).Select

With Selection.ParagraphFormat
    .LeftIndent = CentimetersToPoints(0.2)
    .RightIndent = CentimetersToPoints(0.2)
End With

WordTable.AutoFitBehavior (wdAutoFitWindow)

exTab.Application.DisplayAlerts = False
exTab.Workbooks.Close
End Sub

 

Ich bin echt kurz vor'm Ziel, das aktuelle Problem jedoch zerbricht mir echt meinen Kopf. Ich hoffe ihr könnt mir helfen.

 

Grüße,

Eyyub


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot Serienbrief erstellen mit Anhang
03.11.2020 11:03:32 Eyyub
NotSolved