vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
VBA - Word 
Autor: GeiseL
Datum: 30.04.03 09:21

Hallo zusammen, ich habe ein Problem in VBA in Word:
Ich möchte in einem leeren Dokument durch ein Makro die Fuß- und Kopfzeile aus einer Vorlage laden (damit wird das Dokument ins Mail-Format gebracht). Bisher habe ich das über einem umständlichen Weg gemacht:
1. Das Dokument unter C:\Temp\Mail\Tmp abspeichern
2. Dokument schließen
3. Ein neus Dokument mit der Vorlage (die die Kopf- und Fußzeile enthält) öffnen
4. Inhalt aus der vorher gespeicherten Datei holen und einfügen
Das funktioniert auch, aber nicht immer, sobald man irgendwelche Formatierungen im Text hat (unterstrichen oder fett), wird die Formatierung geändert (ich nehme an der Text wird an die Gliederungsstruktur der Vorlage angepasst), und das möchte ich nicht. Ich möchte das der Inhalt der Datei genau so formatiert bleibt wie vorher.
Mein Frage: gibt es nicht eine einfachere Lösung zu diesem Problem (ohne speichern, schließen, neu öffenen usw.) und wenn nicht, wie kann ich die Formatierung des Textes beim einfügen vermeiden? Hier der Quellcode:
Sub MailTempDoc()
 
    Dim DocName As String
    Dim MailDot As String
 
    If Documents.Count = 0 Then Exit Sub
    If ActiveDocument.Type = wdTypeTemplate Then
        Call MsgBox("Eine Vorlage kann nicht als Email versandt werden.", _
            vbExclamation, "VORBEREITUNG FEHLGESCHLAGEN!")
        Exit Sub
    End If
 
    'Überprüfung, ob letzte Änderungen gespeichert wurden
    If ActiveDocument.Saved = False Then
        Call MsgBox("Bitte speichern Sie zuerst die letzten Änderungen " & _
            "in Ihrem Dokument und" & Chr(13) & "starten Sie danach das Makro" & _
            "erneut!", _
            vbInformation, "ÄNDERUNGEN SPEICHERN!")
        Exit Sub
    End If
 
    ' Mail.dot Global geladen?
    For Each dot In Templates
        If UCase(dot.Name) = TXT_MAIL_DOT Then
            MailDot = dot.FullName
            Exit For
        End If
    Next dot
 
    ' wenn nicht geladen, dann abbrechen
    If (MailDot = "") Then
        Call MsgBox("Die Dokumentenvorlage '" & TXT_MAIL_DOT & "' konnte nicht" & _
          "gefunden werden.", _
            vbExclamation, "VORLAGE NICHT GEFUNDEN!")
        Exit Sub
    End If
 
    ' benötigte Pfade überprüfen
    If Dir("C:\Temp", vbDirectory) = "" Then MkDir ("C:\Temp")
    If Dir(TempMailPfad, vbDirectory) = "" Then MkDir (TempMailPfad)
    If Dir(TempDocPfad, vbDirectory) = "" Then MkDir (TempDocPfad)
 
    ' Name des Activen Documentes merken und in TempDocPfad speichern
    DocName = ActiveDocument.Name
    DocTempName = TempDocPfad & DocName
 
    ActiveDocument.SaveAs FileName:=DocTempName, FileFormat:= _
        wdFormatDocument, LockComments:=False, Password:="", AddToRecentFiles:= _
        False, WritePassword:="", ReadOnlyRecommended:=False, _
        EmbedTrueTypeFonts:= _
        False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
        SaveAsAOCELetter:=False
 
    DocNamePfad = ActiveDocument.FullName
    DocTempName = TempMailPfad & "MAIL_" & DocName
    ActiveDocument.Close
 
    ' Neues Dokument von Mail.dot erstellen
    Documents.Add (MailDot)
    Call Selection.InsertFile(FileName:=DocNamePfad, Range:="", _
        ConfirmConversions:=False, Link:=False, Attachment:=False)
 
    ' Letzte Absatzmarke löschen
    Selection.EndKey Unit:=wdStory
    Selection.TypeBackspace
    Selection.HomeKey Unit:=wdStory
 
    ' Normal.Dot zuweisen
    ActiveDocument.AttachedTemplate = NormalTemplate
 
    ' Neues Dokument als Temp-Datei abspeichern
    ActiveDocument.SaveAs FileName:=DocTempName, FileFormat:=wdFormatDocument, _
      AddToRecentFiles:=False
 
    ' Datei in TempDocPfad löschen
    Kill (TempDocPfad & DocName)
 
 
    ' Symbol Mailsend aktivieren
    For Each Symbolleiste In Application.CommandBars
    If Symbolleiste.Name = "Standard" Then
        Set stLeiste = Application.CommandBars(Symbolleiste.Index)
        Exit For
    End If
    Next Symbolleiste
    For Each Symbol In stLeiste.Controls
        If Symbol.Caption = "MailSend" Then stLeiste.Controls( _
          "MailSend").Enabled = True
    Next Symbol
 
End Sub
Hoffe mir kann jemand helfen, danke im Voraus.

-----------------
MfG GeiseL

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
VBA - Word821GeiseL30.04.03 09:21
Re: VBA - Word353GeiseL01.05.03 23:50

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel