VB: Word Templates umziehen

  • VBScript

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von chris_lalala.

    VB: Word Templates umziehen

    Hallo ers ma,

    da ich der wahnsinns programierer bin brauch ich eure hilfe! ;)

    wir haben fast alle word dateien mit einer vorlage erstellt hat.
    diese vorlagen liegen auf serverA.

    ServerA gibt es aber nicht mehr! die vorlagen liegen jetzt auf serverB.

    jetzt brauch ich ein makro welches jede word datei öffnet, reinschaut ob pfad zu serverA angegben ist und diesen mit serverB ersetzt.

    ich hab hier auch ein skript gefunden welches die dateien öffnet und den neuen template pfad reinschreibt. jedoch gibt es unterverzeichnisse bei serverA und serverB.

    mein riesiger programierverstand sagt mir wie ich vorgehen muss:
    schneide die zeichen "\\serverA\" ab und ersetze sie mit "\\serverB\"

    wie ich das umsetzte ist mir allerdings nicht so ganz klar.

    ich zähle die zeichen von "\\serverA\" schneide diese ab und ersetze das.
    aber wie geht das in VB syntax??


    hier das bisherige skript:

    Visual Basic-Quellcode

    1. Sub AlleDateienimVerzeichnisAendern()
    2. ' Allen Dateien eines Verzeichnisses eine andere Dokumentvorlage zuweisen
    3. With Application.FileSearch
    4. .NewSearch
    5. .FileName = "*.doc"
    6. .LookIn = "\\ServerB\Templates\"
    7. .SearchSubFolders = True
    8. If .Execute() > 0 Then
    9. ReDim strdateien(.FoundFiles.Count)
    10. ReDim strZugehOrdner(.FoundFiles.Count)
    11. 'Durchläuft alle Dateien, die in dem obigen Verzeichnis vorhanden sind.
    12. For i = 1 To .FoundFiles.Count
    13. strdateien(i) = .FoundFiles(i)
    14. strZugehOrdner(i) = .FoundFiles(i)
    15. Do
    16. strdateien(i) = Right(strdateien(i), (Len(strdateien(i)) - InStr(strdateien(i), "\")))
    17. Loop While InStr(strdateien(i), "\") > 0
    18. Documents.Open FileName:=strZugehOrdner(i)
    19. With ActiveDocument
    20. .AttachedTemplate = "\\ServerB\Templates\Letter.dot" 'ordnet die Vorlage "Letter" zu
    21. .Save 'verhindert, dass Speichernachfrage kommt
    22. .Close
    23. End With
    24. Next i
    25. End If
    26. End With
    27. End Sub
    das funktioniert leider nicht so richtig.

    er schreibt dann einfach die lokale normal.dot rein.

    dann habe ich es mit dem kompletten pfad versucht also

    .AttachedTemplate = Replace(.AttachedTemplate, "\\serverA\Formulare\vorlagen\vorlage.dot", "\\serverB\Formulare\vorlagen\vorlage.dot")

    -->> leider schreibt er wieder nur die normal.dot rein.

    chris_lalala schrieb:

    mein riesiger programierverstand sagt mir wie ich vorgehen muss:
    schneide die zeichen "\\serverA\" ab und ersetze sie mit "\\serverB\"
    Die Replace-Funktion macht eigentlich genau das. Sie sucht im zu durchsuchenden Text (erstes Argument) alle Vorkommen des zu suchenden Textes (zweites Argument) und ersetzt diese mit dem zu ersetzenden Text (drittes Argument).

    Welchen Wert hat denn ActiveDocument.AttachedTemplate nach dem Öffnen der Datei? Was ich mir vorstellen könnte (reine Vermutung) wäre, dass Word die Vorlagendatei nicht findet, serverA gibt es ja nicht mehr, und dann automatisch "...\Normal.dot" als Vorlage zuweist. Wenn man dann die Ersetzung vornimmt, kommt ja "\\serverA\" im Pfad nicht vor, und somit bleibt es auch nach der Ersetzung bei "...\Normal.dot".

    Kann man am Dateinamen oder am Verzeichnis, in dem die Datei abgespeichert ist, erkennen, welche Vorlage dazugehört oder vielleicht am Inhalt der Datei (Text im Dokument, Textmarken etc.)? Dann könnte man ja daraus vielleicht etwas machen.



    EDIT:

    Wenn das, was ich oben beschrieben habe nicht das Problem ist, kann ein Versuch hiermit nicht schaden:

    Visual Basic-Quellcode

    1. .AttachedTemplate.Path = Replace(.AttachedTemplate.Path, "\\serverA\", "\\serverB\")

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „roddy“ ()

    juhu das forum geht wieder .... ;)


    es ist echt sau komisch. warum nimmt er die lokale vorlage????

    ich hab jetzt extra nochmal ein pc mit dem alten namen erstellt, die freigabe usw. aber immer wieder nimmt er die lokale vorlage.

    ActiveDocument.AttachedTemplate=>>> c:\dokumente ...\Vorlagen\normal.dot
    hier die lösung!

    das problem war dabei den alten template pfad zu öffnen.

    ---> das funktioniert so

    ' Dialog "Tools -> Templates and Addins" öffnen und "Document Template" auslesen
    Set dlgTemplate = Dialogs(wdDialogToolsTemplates)
    strPath = dlgTemplate.Template
    msgbox strPath

    wen das ganze skript interessiert:

    Visual Basic-Quellcode

    1. Sub AlleDateienimVerzeichnisAendern()
    2. ' Allen Dateien eines Verzeichnisses eine andere Dokumentvorlage zuweisen
    3. 'Variablen declaration
    4. strServerAlt = "\\SERVERA\"
    5. strServerNeu = "\\SERVERB\"
    6. strVerzeichnis = "C:\blabla\"
    7. With Application.FileSearch
    8. .NewSearch
    9. .FileName = "*.doc"
    10. .LookIn = strVerzeichnis
    11. .SearchSubFolders = True
    12. If .Execute() > 0 Then
    13. ReDim strDateien(.FoundFiles.Count)
    14. ReDim strZugehOrdner(.FoundFiles.Count)
    15. 'Durchläuft alle Dateien, die in dem obigen Verzeichnis vorhanden
    16. ' sind.
    17. For i = 1 To .FoundFiles.Count
    18. strDateien(i) = .FoundFiles(i)
    19. strZugehOrdner(i) = .FoundFiles(i)
    20. Do
    21. strDateien(i) = Right(strDateien(i), (Len(strDateien(i)) - _
    22. InStr(strDateien(i), "\")))
    23. Loop While InStr(strDateien(i), "\") > 0
    24. Documents.Open FileName:=strZugehOrdner(i)
    25. 'Dialog "Tools -> Templates and Addins" öffnen und "Document" & _
    26. "Template" auslesen
    27. Set dlgTemplate = Dialogs(wdDialogToolsTemplates)
    28. strPath = dlgTemplate.Template
    29. If strPath = "Normal" Then
    30. ActiveDocument.Close
    31. ElseIf Left(strPath, 3) = "C:\" Then
    32. ActiveDocument.Close
    33. ElseIf Left(strPath, 9) = "\\SERVERB" Then
    34. ActiveDocument.Close
    35. Else
    36. strPath = Right(strPath, Len(strPath) - Len(strServerAlt)) _
    37. 'hier wird die angegebene Anzahl der Zeichen
    38. ' abgeschnitten!!!!
    39. strPath = strServerNeu + strPath
    40. With ActiveDocument
    41. .AttachedTemplate = strPath
    42. .Save 'verhindert, dass Speichernachfrage kommt
    43. .Close
    44. End With
    45. End If
    46. Next i
    47. End If
    48. End With
    49. End Sub