Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Dokumentformatvorlagen in mehreren Dokumenten ersetzen

Frage Entwicklung VB for Applications

Mitglied: ahstax

ahstax (Level 2) - Jetzt verbinden

26.08.2013, aktualisiert 27.08.2013, 2551 Aufrufe, 11 Kommentare, 3 Danke

Hallo,

ich möchte gerne mit einem Makro in einigen vielen Dokumenten (Formbriefe) die verwendeten Dokumentenformatvorlagen ersetzen. Mein Code bis dato (der nicht funktioniert...) sieht so aus:

01.
Sub FormatvorlagenZuweisen01() 
02.
 
03.
    Dim oTemplate As Template 
04.
    Dim oDoc As Document 
05.
    Dim oDocPath As String 
06.
    Dim intDokumentenzaehler As Integer 
07.
        intDokumentenzaehler = 0 
08.
     
09.
     
10.
    Set oTemplate = "\\Server\Speicherort\Formbriefe Test\Vorlage\test.dot" 
11.
    Set oDocPath = "\\Server\Speicherort\Formbriefe Test\" 
12.
     
13.
    For Each oDoc In oDocPath 
14.
        Set oDoc = ActiveDocument 
15.
        With ActiveDocument 
16.
            .UpdateStylesOnOpen = False 
17.
            .AttachedTemplate = oTemplate 
18.
            .Save 
19.
            .Close 
20.
        End With 
21.
        intDokumentenzaehler = intDokumentenzaehler + 1 
22.
        Set oDoc = Nothing 
23.
    Next oDoc 
24.
     
25.
    MsgBox "Bearbeitete Dokumente: " & intDokumentenzaehler 
26.
     
27.
End Sub
Die Fehlermeldung beim Kompilieren lautet:
"Typen unverträglich"

Daraus entnehme ich, dass Variablen nicht miteinander verträglich sind.

Kann mir bitte jemand sagen, ob mein Vorhaben durchführbar ist und wo mein Fehler im Code liegt?

Neugierige Grüße,
Andreas

(Word 2010)
Mitglied: colinardo
26.08.2013, aktualisiert um 15:48 Uhr
Hallo Andreas,
so wie du das versuchst geht es leider nicht.
Ungetestet müsstest du es in dieser Art machen:
01.
Sub FormatvorlagenZuweisen01() 
02.
    
03.
    Dim oTemplate 
04.
    Dim oDoc As Document 
05.
    Dim oDocPath As String 
06.
    Dim intDokumentenzaehler As Integer 
07.
    intDokumentenzaehler = 0 
08.
     
09.
    Set fso = CreateObject("Scripting.Filesystemobject") 
10.
     
11.
    Set oTemplate = "\\Server\Speicherort\Formbriefe Test\Vorlage\test.dot" 
12.
    Set oDocPath = "\\Server\Speicherort\Formbriefe Test\" 
13.
 
14.
    Application.DisplayAlerts = wdAlertsNone 
15.
 
16.
    For Each f In fso.GetFolder(oDocPath).Files 
17.
        If LCase(Right(f.Name, 3)) = "doc" Or LCase(Right(f.Name, 4)) = "docx" Or LCase(Right(f.Name, 4)) = "docm" Then 
18.
            Set oDoc = Application.Documents.Open(f.Path, Visible:=False) 
19.
            With oDoc 
20.
                .AttachedTemplate = oTemplate 
21.
                .Save 
22.
                .Close 
23.
            End With 
24.
            intDokumentenzaehler = intDokumentenzaehler + 1 
25.
            Set oDoc = Nothing 
26.
        End If 
27.
    Next 
28.
    Set fso = Nothing 
29.
    Application.DisplayAlerts = wdAlertsAll 
30.
 
31.
    MsgBox "Bearbeitete Dokumente: " & intDokumentenzaehler 
32.
End Sub

Grüße Uwe
Bitte warten ..
Mitglied: ahstax
26.08.2013 um 13:47 Uhr
Hallo Uwe,

Ungetestet müsstest du es in dieser Art machen:

Getestet auch!

Danke Dir!!!
Bitte warten ..
Mitglied: ahstax
26.08.2013 um 13:56 Uhr
Das hier:
01.
Dim oTemplate As Template
muss bei mir ein String sein... ist mir noch aufgefallen
Bitte warten ..
Mitglied: colinardo
26.08.2013 um 13:58 Uhr
stimmt, ist korrigiert
Bitte warten ..
Mitglied: ahstax
26.08.2013, aktualisiert um 15:30 Uhr
Jetzt war ich zu schnell (beim "als gelöst" markieren)...

Wie kann ich nachfolgenden Schnipsel passend machen, damit ALLE Formatvorlagen mitgenommen werden, auch die Nummerierungen...

01.
Application.OrganizerCopy Source:=, _ 
02.
   Destination:=, _ 
03.
   Name:=ALLE, _ 
04.
   Object:= 
05.
Next styleLoop
Kann man
01.
For Each styleLoop In fso.getFile(oTemplate).Styles 
02.
... 
03.
Next styleLoop
irgendwie verwenden?
Bitte warten ..
Mitglied: colinardo
26.08.2013 um 16:17 Uhr
Also alle Styles die in die im alten Template des Dokuments vorhanden waren, kannst du so in das Dokument einbetten, bevor du das Dokument mit dem neuen Template verknüpfst. Wichtig: Diesen Schnippsel vor Zeile 20 in obigen Script einfügen.
01.
oDoc.CopyStylesFromTemplate (oDoc.AttachedTemplate.FullName)
Grüße Uwe
Bitte warten ..
Mitglied: ahstax
26.08.2013 um 16:25 Uhr
Diese Zeile hatte ich zwischenzeitlich auch irgendwo gelesen und ausprobiert...

Aber natürlich an der völlig falschen Stelle eingefügt, so dass das Ergebnis Müll war. So sieht es jetzt so aus, als ob es geht. Ich werde weiter berichten...!

Danke erst mal!!!
Bitte warten ..
Mitglied: ahstax
26.08.2013 um 16:31 Uhr
Kann es sein, dass sich Word schwer tut, die Formatierungen von Aufzählungen (Nummerierungen mit Zahlen, Buchstaben) sauber zu übernehmen?
Gibts da noch einen Trick?
Bitte warten ..
Mitglied: ahstax
27.08.2013, aktualisiert um 11:31 Uhr
Hallo miteinander,

hier klick
hab ich gelesen, dass .CopyStylesFromTemplate alleine insbesondere bei Nummerierungsvorlagen nicht ausreichen kann. Es wird vorgeschlagen, zusätzlich Application.OrganizerCopy zu verwenden. (Es sollen ja alle Formatvorlagen, auch die für die Nummerierungen) mitgenommen werden).

Ich habe versucht, meinen Code entsprechend anzupassen. Blöderweise erhalte ich regelmäßig einen Fehler 4198 ("Befehl misslungen"), den ich Zeile 76ff. versuche abzufangen.
Schlußendlich besagt mir die Messagebox Zeile 85 dann aber, dass KEINE Formatvorlage angewandt wurde.

Kann mir jemand einen Tipp geben?

01.
Public Sub FormatvorlagenZuweisen() 
02.
    
03.
    Dim oTemplate As String 
04.
    Dim oDoc As Document 
05.
    Dim oDocPath As String 
06.
    Dim intDokumentenzaehler As Integer 
07.
    intDokumentenzaehler = 0 
08.
    Dim intDokumentenzaehlerBearbeitet As Integer 
09.
    intDokumentenzaehlerBearbeitet = 0 
10.
     
11.
    Dim intAnzahlZuPruefenderDateien As Integer 
12.
    intAnzahlZuPruefenderDateien = 0 
13.
     
14.
    Dim oStyle As Style 
15.
    Dim strStyle As String 
16.
    Dim DocTmp As Document 
17.
    Dim i As Long 
18.
     
19.
    Dim stlVorlage As Style 
20.
    Dim intBenutzte As Integer 
21.
    Dim intVergeblich As Integer 
22.
    Dim intGeklappt As Integer 
23.
    Dim docVorlage As Document 
24.
     
25.
    Set fso = CreateObject("Scripting.Filesystemobject") 
26.
     
27.
     
28.
    oTemplate = fm1.txtBxPfadVorlage.Text 
29.
    oDocPath = fm1.txtBxPfadDokumentenOrdner.Text 
30.
 
31.
 
32.
    Application.DisplayAlerts = wdAlertsNone 
33.
     
34.
    fm1.cmdBtnStart.Caption = "Bearbeitung läuft" 
35.
     
36.
    intAnzahlZuPruefenderDateien = fso.GetFolder(oDocPath).Files.Count 
37.
     
38.
    For Each f In fso.GetFolder(oDocPath).Files 
39.
     
40.
        intDokumentenzaehler = intDokumentenzaehler + 1 
41.
         
42.
        fm1.cmdBtnStart.Caption = "Bearbeitung / Prüfung läuft" & vbCrLf & intDokumentenzaehler & "/" & intAnzahlZuPruefenderDateien 
43.
         
44.
        If LCase(Right(f.Name, 3)) = "doc" Or LCase(Right(f.Name, 4)) = "docx" Or LCase(Right(f.Name, 4)) = "docm" Then 
45.
            Set oDoc = Application.Documents.Open(f.Path, Visible:=False) 
46.
            With oDoc 
47.
             
48.
                .CopyStylesFromTemplate Template:=oTemplate 
49.
                 
50.
                '   http://www.office-archive.com/59-word/55712f65c723e7ee.htm 
51.
                 
52.
                .AttachedTemplate = oTemplate 
53.
                 
54.
                   
55.
                  Set docVorlage = Documents.Open(oTemplate, Visible:=False) 
56.
                   
57.
                    ' Copy all styles using the organizer 
58.
                  intBenutzte = 0 
59.
                  intVergeblich = 0 
60.
                  intGeklappt = 0 
61.
                   
62.
                  On Error Resume Next 
63.
                   
64.
                  For Each stlVorlage In docVorlage.Styles 
65.
                   
66.
                    If stlVorlage.InUse = True Then 
67.
                        intBenutzte = intBenutzte + 1 
68.
                    End If 
69.
                   
70.
                    Application.OrganizerCopy _ 
71.
                        Source:=docVorlage.FullName, _ 
72.
                        Destination:=oDoc.FullName, _ 
73.
                        Name:=stlVorlage.NameLocal, _ 
74.
                        Object:=wdOrganizerObjectStyles 
75.
                         
76.
                        If Err.Number = 4198 Then 
77.
                            intVergeblich = intVergeblich + 1 
78.
                        Else 
79.
                            intGeklappt = intGeklappt + 1 
80.
                        End If 
81.
                             
82.
                  Next stlVorlage 
83.
                   
84.
                  'http://www.office-loesung.de/ftopic39646_0_0_asc.php 
85.
                  MsgBox intVergeblich & " vergebliche Versuche!" & Chr(13) & intGeklappt & " erfolgreiche!" & _ 
86.
                        Chr(13) & intBenutzte & " benutzte!" 
87.
                   
88.
                  ' Close the template and don't save any changes. 
89.
                  docVorlage.Close False 
90.
                                 
91.
                .Save 
92.
                .Close 
93.
            End With 
94.
            intDokumentenzaehlerBearbeitet = intDokumentenzaehlerBearbeitet + 1 
95.
            Set oDoc = Nothing 
96.
             
97.
        End If 
98.
    Next 
99.
    Set fso = Nothing 
100.
    Application.DisplayAlerts = wdAlertsAll 
101.
 
102.
    MsgBox "Bearbeitete Dokumente: " & intDokumentenzaehlerBearbeitet 
103.
     
104.
    fm1.cmdBtnStart.Caption = "Übertragung Formatierung starten"  
105.
     
106.
End Sub
neugierige Grüße,
Andreas
Bitte warten ..
Mitglied: ahstax
27.08.2013 um 15:14 Uhr
Kann man da vielleicht was mit .ListTemplates machen?
Wenn ja, hab ich noch nicht verstanden, wie...
Bitte warten ..
Mitglied: ahstax
09.09.2013 um 14:18 Uhr
Ja, der Fehler saß mal wieder vor dem PC...

Wichtig ist (nach meiner Beobachtung), dass man bei einem Office 2010-PC eine Vorlage im dotx-Format verwendet.
Dann klappts auch mit dem Nachbarn...!

Danke für die Hilfe der versammelten Mannschaft!
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
LAN, WAN, Wireless
gelöst 1 Port in mehreren VLANs? (7)

Frage von mario87 zum Thema LAN, WAN, Wireless ...

Batch & Shell
gelöst Powershell - In Textdatei suchen und ersetzen (5)

Frage von Raaja89 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...

Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...

Windows Server
RODC über VPN - Verbindung weg (10)

Frage von stefan2k1 zum Thema Windows Server ...