MS Word Macro in AutoIt ansteuern bzw nachbilden

  • Hi@ all,

    ich hab da ein Problem mit der Umsetzung.
    So hier die Ausgangssituation:
    Wir haben ein Programm das Lieferscheine,Rechnungen ect. in ein Worddokument übergibt. Das Dokument in einem US-LETTER .rtf Format.

    Ich muss das Ganze mit einer anderen Schriftart (Courier New), Schriftgröße (9), Seitenformat (A4) und einer Vorlage (Kopfzeile: Firmenlogo, Fusszeile: Anschrift) zusammenfügen und umformartieren.

    Das umformatierte Word Dokument soll dann in ein PDF umgewandelt werden, zur Ablage in ein Verzeichniss gespeichert und als Mail versendet werden.

    hier das Installations intensive Word Macro:
    (PDF Drucker muss installiert werden das Macro muss immer wieder angepasst werden , der Standard Drucker ändert sich laufend)

    Spoiler anzeigen
    [autoit]

    ' Erste Leerzeichen entfernen
    '
    Selection.MoveDown Unit:=wdLine, Count:=10, Extend:=wdExtend
    Selection.Delete Unit:=wdCharacter, Count:=1
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
    .Text = "^p^p^p^p^p^p^p^p^p^p"
    ' ^p^p^p^p^p^p^p^p^p^p^p^p^p"
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll

    ' Manuelle Seiteumbrüche entfernen

    [/autoit] [autoit][/autoit] [autoit]

    ' Selection.Find.ClearFormatting
    ' Selection.Find.Replacement.ClearFormatting
    ' With Selection.Find
    ' .Text = "^m"
    ' .Replacement.Text = ""
    ' .Forward = True
    ' .Wrap = wdFindContinue
    ' .Format = False
    ' .MatchCase = False
    ' .MatchWholeWord = False
    ' .MatchWildcards = False
    ' .MatchSoundsLike = False
    ' .MatchAllWordForms = False
    ' End With
    ' Selection.Find.Execute Replace:=wdReplaceAll

    [/autoit] [autoit][/autoit] [autoit]

    ' Alles auf Courier NEW schrift 9 einstellen

    Selection.WholeStory
    Selection.Font.Name = "Courier New"
    Selection.Font.Size = 9

    ' Seiteneinstellungen
    '
    With ActiveDocument.Styles(wdStyleNormal).Font
    If .NameFarEast = .NameAscii Then
    .NameAscii = ""
    End If
    .NameFarEast = ""
    End With
    With ActiveDocument.PageSetup
    .LineNumbering.Active = False
    .Orientation = wdOrientPortrait
    .TopMargin = CentimetersToPoints(3.7)
    .BottomMargin = CentimetersToPoints(0.74)
    .LeftMargin = CentimetersToPoints(0.47)
    .RightMargin = CentimetersToPoints(0.47)
    .Gutter = CentimetersToPoints(0)
    .HeaderDistance = CentimetersToPoints(1.25)
    .FooterDistance = CentimetersToPoints(1.25)
    .PageWidth = CentimetersToPoints(21)
    .PageHeight = CentimetersToPoints(29.7)
    .FirstPageTray = wdPrinterDefaultBin
    .OtherPagesTray = wdPrinterDefaultBin
    .SectionStart = wdSectionNewPage
    .OddAndEvenPagesHeaderFooter = False
    .DifferentFirstPageHeaderFooter = False
    .VerticalAlignment = wdAlignVerticalTop
    .SuppressEndnotes = False
    .MirrorMargins = False
    .TwoPagesOnOne = False
    .BookFoldPrinting = False
    .BookFoldRevPrinting = False
    .BookFoldPrintingSheets = 1
    .GutterPos = wdGutterPosLeft
    End With

    ' ein neues Dokument von der der Vorlage Bestätigung.dot erstellen
    Dokument = "C:\TEMP\Bestätigung.rtf"

    If Dokument = True Then Dokument.DeleteFile "C:\TEMP\Bestätigung.rtf", True

    Documents.Add Template:="C:\RUEFA\Vorlagen\Bestätigung.dot", NewTemplate:= _
    True, DocumentType:=0
    ActiveDocument.SaveAs FileName:="C:\TEMP\Bestätigung.rtf", FileFormat:= _
    wdFormatRTF, LockComments:=False, Password:="", AddToRecentFiles:= _
    True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:= _
    False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
    SaveAsAOCELetter:=False
    ActiveWindow.Close
    ' ActiveDocuments.Close

    ' das RTF Dokument und die vorlage zusammenführen

    ActiveDocument.Merge FileName:="C:\TEMP\Bestätigung.rtf", _
    MergeTarget:=wdMergeTargetSelected, DetectFormatChanges:=True, _
    UseFormattingFrom:=wdFormattingFromPrompt, AddToRecentFiles:=False

    '
    ' Makro1 Makro
    ' Makro aufgezeichnet am 08.02.2005 von Garnreiter Thomas
    '
    ActivePrinter = "FreePDF XP"
    Application.PrintOut FileName:="", Range:=wdPrintAllDocument, Item:= _
    wdPrintDocumentWithMarkup, Copies:=1, Pages:="", PageType:= _
    wdPrintAllPages, ManualDuplexPrint:=False, Collate:=True, Background:= _
    True, PrintToFile:=False, PrintZoomColumn:=0, PrintZoomRow:=0, _
    PrintZoomPaperWidth:=0, PrintZoomPaperHeight:=0
    ActivePrinter = "HP LaserJet"

    [/autoit] [autoit][/autoit] [autoit]

    ' Die Dokumente Schließen
    Documents.Close SaveChanges:=wdDoNotSaveChanges
    ' Documents("w_precruefpr").Activate
    ' Documents("w_precruefpr").Close SaveChanges:=wdDoNotSaveChanges

    [/autoit] [autoit][/autoit] [autoit]

    End Sub

    [/autoit]

    Mein AutoIt Ansatz leider noch sehr unvollständig:
    1.) ich hab Probleme mit dem Sprung in das geöffnete Worddokument
    2.) probleme mit der umsetzeung von VB macro in AU3 schript


    Spoiler anzeigen
    [autoit]


    #region --- ScriptWriter generated code Start ---
    Opt("WinWaitDelay", 100)
    Opt("WinTitleMatchMode", 4)
    Opt("WinDetectHiddenText", 1)
    Opt("MouseCoordMode", 0)

    [/autoit] [autoit][/autoit] [autoit]

    #endregion --- ScriptWriter generated code End ---

    [/autoit] [autoit][/autoit] [autoit]

    ;~ #NoTrayIcon

    [/autoit] [autoit][/autoit] [autoit]

    #include <Word.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Local $Vorlage = "D:\9. Scripts_ bestätigung\Bestätigung live\k0257_vorlagen\Bestätigung_Orient.dot"
    Local $Filepath = "D:\9. Scripts_ bestätigung\Bestätigung live\"
    Local $RRLOGO = "D:\9. Scripts_ bestätigung\Ruefa\Ruefa.jpg"
    Local $s_mode

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep(200)
    If WinExists("w_precruefpr.", "") Then
    ExitLoop
    EndIf

    WEnd
    ClipPut("")
    WinWait("w_precruefpr.", "Microsoft Word-Dokument")
    If Not WinActive("w_precruefpr.", "Microsoft Word-Dokument") Then WinActivate("w_precruefpr.", "Microsoft Word-Dokument")
    WinWaitActive("w_precruefpr.", "Microsoft Word-Dokument")

    [/autoit] [autoit][/autoit] [autoit]

    Send("{CTRLDOWN}a{CTRLUP}")
    Send("{CTRLDOWN}c{CTRLUP}")

    [/autoit] [autoit][/autoit] [autoit]

    WinClose("w_precruefpr.", "Microsoft Word-Dokument")

    [/autoit] [autoit][/autoit] [autoit]

    If WinExists("Microsoft Office Word","&Ja") Then
    ControlClick("Microsoft Office Word","&Ja",7)
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;~ Send("{ALTDOWN}EA{ALTUP}")
    ;~ Sleep(100)
    ;~ Send(" ^C")
    ;~ WinClose("w_precruefpr.", "")

    [/autoit] [autoit][/autoit] [autoit]

    $oWordApp = _WordCreate($Vorlage, 0, 1, 0)
    $oDoc = _WordDocGetCollection($oWordApp, 0)

    [/autoit] [autoit][/autoit] [autoit]

    $handle = ControlGetHandle("Dokument", "", "CLASSNN:_WwG")
    If Not WinActive($handle) Then WinActivate($handle)

    [/autoit] [autoit][/autoit] [autoit]

    ;~ ControlSend("", "", $handle, "^v")
    ;~ ControlSend("", "", $handle, "{CTRLDOWN}v{CTRLUP}")
    Send("^v")

    [/autoit] [autoit][/autoit] [autoit]

    _WordMacroRun ($oWordApp, "Bestätigung")

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    Ich würde gerne den _WordMacroRun aufruf auslassen, da ich das Ganze Autark installieren muss. (bei der Inst. soll alleine nur das Word (2003 / 2007) vorraussetzung sein.

    Die ganzen Variablen sollen dann in ein INI file


    Bitte um Hilfe .........


    danke TOMTOM