WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Word VBA Makro erweitern (http://www.wcm.at/forum/showthread.php?t=212938)

enjoy2 28.03.2007 11:28

Word VBA Makro erweitern
 
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

enjoy2 28.03.2007 16:15

argl, wenn man weiß wie, wird es wohl sehr einfach sein ...

ein guter Freund zeigte mir per Mail einen Lösungsansatz (mitdenken war aber dafür notwendig ;))

was zu diesem Code führte

Code:

    .Destination = wdSendToNewDocument
    For i = 1 To Anzahl
      .DataSource.ActiveRecord = i
     
ds_name = .DataSource.DataFields(Schluessel)
     
cleanname = Replace(ds_name, "\", "")
cleanname = Replace(cleanname, "/", "")
cleanname = Replace(cleanname, """", "")
cleanname = Replace(cleanname, "*", "")
cleanname = Replace(cleanname, "?", "")
cleanname = Replace(cleanname, "<", "")
cleanname = Replace(cleanname, ">", "")
cleanname = Replace(cleanname, "|", "")
     
      dsname = Verzeichnis & "\" & cleanname & ".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

jetzt klappts auch mit dem Speichern bei Namen mit Sonderzeichen

thx nochmals auch auf diesem Weg


Alle Zeitangaben in WEZ +2. Es ist jetzt 01:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag