habe hier ein kl. Problem, dass in mir eine Gedankenblockade verursacht
In verschiedenen Worddokumenten wird folgendes Skript verwendet um das Dokument von der Datenquelle zu lösen und mit einen bestimmten Namen aus einen Formularfeld (LBSName) zu speichern
Code:
Private Const Verzeichnis = "C:\Dokumente\Kontrollberichte"
Private Const Schluessel = "LBSName"
Sub JederDatensatzInEineEigenstandigeDatei_2()
With ActiveDocument.MailMerge
If .MainDocumentType = wdNotAMergeDocument Then
MsgBox "Das aktive Dokument ist kein Seriendruckhauptdokument."
Exit Sub
End If
.DataSource.ActiveRecord = wdLastRecord
Anzahl = .DataSource.ActiveRecord
If Anzahl = 0 Then
MsgBox "Es wurden keine Datensätze gefunden."
Exit Sub
End If
flag = False
For Each x In .DataSource.DataFields
If x.Name = Schluessel Then
flag = True
Exit For
End If
Next
If flag = False Then
Q = Chr(34)
MsgBox "Das nominierte Feld " & Q & Schluessel & Q & _
" existiert nicht in der Datenquelle."
Exit Sub
End If
.Destination = wdSendToNewDocument
For i = 1 To Anzahl
.DataSource.ActiveRecord = i
dsname = Verzeichnis & "\" & _
.DataSource.DataFields(Schluessel).Value & ".doc"
.DataSource.FirstRecord = i
.DataSource.LastRecord = i
.Execute
ActiveDocument.Range.Find.Execute FindText:="^b", ReplaceWith:=""
ActiveDocument.SaveAs FileName:=dsname, AddToRecentFiles:=False
ActiveDocument.Close
Next i
.DataSource.FirstRecord = 1 'be smart
End With
End Sub
Das Problem ist, dass in diesem Formularfeld auch Sonderzeichen wie \/:*?"<>| stehen dürfen, bzw. leider in Zukunft müssen. Ein Speichern mit einem dieser Zeichen ist aufgurnd der Windowsrestiktionen nicht möglich.
Ich würde gerne vor dem Speichern den Dateiname nach diesem Sonderzeichen durchsuchen lassen und diese durch nix ersetzen lassen.
Dachte mir dass dies ähnlich wie diese Zeile sein müsste
Code:
ActiveDocument.Range.Find.Execute FindText:="^b", ReplaceWith:=""
nur dies ersetzt, wenn ich es richtig verstehe Zeichen im Dokument selbst und nicht im Dateinamen
imho, nur das Problem ist, mit Programmierung kenn ich mich leider überhaupt nicht aus, sollte es möglich sein, dieses Suchen und Ersetzen in dieses Codeschnippsel einzusetzen
Code:
.Destination = wdSendToNewDocument
For i = 1 To Anzahl
.DataSource.ActiveRecord = i
dsname = Verzeichnis & "\" & _
.DataSource.DataFields(Schluessel).Value & ".doc"
.DataSource.FirstRecord = i
.DataSource.LastRecord = i
.Execute
bzw. das wäre mir am liebesten, da ich hier nicht noch lang und breit anderes ändern müsste.
Zu Fragen, warum hast du das so und so gemacht, ähmm
hab ich nicht gemacht, hat mein Vorgänger irgendwo im Internet gefunden und nur Pfad und Formularfeldvorlage geändert
Somit tu ich mir schwer zu sagen, warum dies oder jenes so und so gemacht wurde.
Hoffe trotzdem, dass mir wer helfen kann