WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 28.03.2007, 11:28   #1
enjoy2
-------------
 
Benutzerbild von enjoy2
 
Registriert seit: 22.03.2000
Ort: Tullnerfeld
Alter: 52
Beiträge: 14.550

Mein Computer

Standard 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
____________________________________
EnJoy

* Kl. Anleitung, welche Infos bei Problemen benötigt werden
* was ich nicht weiß, weiß Google bzw. vorm Posten Listen to Bart

* BITTE, füttert keine Trolle, siehe auch Definition bzw. Merkbefreiung - Verordnung
* Wie man Fragen richtig stellt
enjoy2 ist offline   Mit Zitat antworten
Alt 28.03.2007, 16:15   #2
enjoy2
-------------
 
Benutzerbild von enjoy2
 
Registriert seit: 22.03.2000
Ort: Tullnerfeld
Alter: 52
Beiträge: 14.550

Mein Computer

Standard

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
____________________________________
EnJoy

* Kl. Anleitung, welche Infos bei Problemen benötigt werden
* was ich nicht weiß, weiß Google bzw. vorm Posten Listen to Bart

* BITTE, füttert keine Trolle, siehe auch Definition bzw. Merkbefreiung - Verordnung
* Wie man Fragen richtig stellt
enjoy2 ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 20:51 Uhr.


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