Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Mein erstes Script. Bitte Tipps und Kritik
Gehe zu Seite 1, 2  Weiter
zurück: Wert in einem Dialog abfrage ohne OK zu klicken? weiter: balloon und msoButtonSetYesNo Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Bitte Status wählen ! Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
kepler
Im Profil kannst Du frei den Rang ändern


Verfasst am:
29. Nov 2005, 13:08
Rufname:

Mein erstes Script. Bitte Tipps und Kritik - Mein erstes Script. Bitte Tipps und Kritik

Nach oben
       

Hallo,

hier ist mein erstes VBA-Script und ich würde mich freuen, wenn Ihr Euch es mal anseht.
Zum Sinn und Zweck: ich liefere an den Kunden ein leeres Doc mit Formatvorlagen. Der fügt den Text ein aus verschiedenen Quellen und macht eine Menge Murks damit.
Ich bekomme die Dokumente zurück und editiere sie. Aber durch die Copy&Paste-Vorgänge und automatisch generierte Styles des Kunden-Word's bekomme ich eine Menge fremder Formatvorlagen, die ich nicht haben will.
Da das Dokument sowieso von mir editiert wird, sollte es danach keinen Text mehr geben, der mit fremden Styles belegt ist.
Die fremden Styles kenne ich nicht und es können ganz verschiedene sein.
Also habe ich versucht ein Script zu schreiben, daß alle fremden Styles löscht. Ich vergleiche das Doc mit meiner ursprünglichen Dot.
Zum Ende kopiere ich dann noch die Styles aus einer aktualisierten Version des Dot in mein Dokument.

Das Script funktioniert soweit und ich würde mich über Kritik freuen, weil es bestimmt Stellen gibt, die man eleganter lösen könnte.

Hier der ganze Code:


Code:
Sub StylesDel01()
Dim myDotPathNew, myDotPathOld As String
Dim myDot, myDoc As Document
Dim myDocStyles As Style
Dim AryDot(), AryDoc() As String
Dim y, z As Integer
myDotPathNew = "Pfad zum neuen Dot"
myDotPathOld = "Pfad zum alten Dot, dient als Vergleich zum Doc"
y = 0
z = 0
Set myDoc = ActiveDocument
Set myDot = Documents.Open(FileName:=myDotPathOld, ReadOnly:=True)

'nur die Benutzerdefinierten Styles werden eingelesen
For Each myDocStyles In myDoc.Styles 'Styles des zu überprüfenden Dokuments
    If myDocStyles.BuiltIn = False Then
    ReDim Preserve AryDoc(y)
    AryDoc(y) = myDocStyles
    y = y + 1
    End If
Next myDocStyles

For Each myDocStyles In myDot.Styles 'Styles der alten Vorlage
    If myDocStyles.BuiltIn = False Then
    ReDim Preserve AryDot(z)
    AryDot(z) = myDocStyles
    z = z + 1
    End If
Next myDocStyles

'wenn ich myDot nicht schließe, bezieht sich komischerweise myDoc plötzlich auf myDot???
myDot.Close
Dim TempIdx, zaehler, m As Integer
zaehler = UBound(AryDot)

For Each i In AryDoc
    TempIdx = 0
    For m = 0 To zaehler
        If i = AryDot(m) Then
        'MsgBox zaehler & "-" & m & i & "--" & AryDot(m), , "Test"
        m = zaehler 'bei Treffer soll die Schleife abgebrochen werden
        Else
        TempIdx = TempIdx + 1
        End If
    Next m
   ' TempIdx kann nur dann den Löschwert erreichen, wenn oben keine Übereinistimmung gefunden wurde
    If TempIdx >= zaehler Then myDoc.Styles(i).Delete
Next i
myDoc.CopyStylesFromTemplate Template:=myDotPathNew

End Sub



Insbesondere verstehe ich folgendes nicht:

1. oben mache ich folgendes
Code:
Set myDoc = ActiveDocument

später öffne ich das Dot, welches dann den Focus hat.
Wenn ich aber jetzt die Styles löschen will in dem Doc, geht es nicht, sondern nur, wenn ich das Dot vorher schließe. Kann es sein, daß ich nur Dokumente bearbeiten kann, die den Focus haben?
Oder ändert sich etwa der Inhalt der Variablen myDoc, wenn ein anderes Dokument den Focus hat?

2. bei der verschachtelten Schleife unten habe ich mir echt einen abgebrochen, weil ich keine Steuerbefehle für Schleifen gefunden habe.
Resume Next geht ja nur bei Fehlern und mit End oder Stop bin ich nicht weiter gekommen, sowas wie Return gibt es nur für Go....to.

Mit den verschiedenen while-Schleifen bin ich auch nicht weiter gekommen.
Gibt es keine Möglichkeit eine Schleife dirket zu unterbrechen, wenn eine Bedingung eintrifft?
3. ich habe oben versucht die Arrays AryDoc und AryDot As Style zu definieren, habe aber dann immer Fehler bekommen. Ich hatte gelesen, man könnte einen Array auch in jeglichem Datenvormat definieren?

Vielen Dank für Eure Kritik
Lisa
Moderator; Word seit Word 5.0 (für DOS)


Verfasst am:
29. Nov 2005, 14:01
Rufname:
Wohnort: Leipzig


AW: Mein erstes Script. Bitte Tipps und Kritik - AW: Mein erstes Script. Bitte Tipps und Kritik

Nach oben
       

Hallo Kepler,

nur erstmal als Einzelheit: For-Next und aus For-Each-Schleifen kannst du bei Erreichen des Ziels mit Exit For verlassen.
An sich gibt es für alle Schleifen solche Exits.

_________________
Sei doch so nett und gib eine Rückmeldung, ob es klappt!
Gruß, Lisa

Guter Rat ist teuer!
kepler
Im Profil kannst Du frei den Rang ändern


Verfasst am:
29. Nov 2005, 14:07
Rufname:

AW: Mein erstes Script. Bitte Tipps und Kritik - AW: Mein erstes Script. Bitte Tipps und Kritik

Nach oben
       

aha, ich hatte gedacht, Exit würde das ganze Programm abbrechen. Aber wenn es auch für eine einzelne Schleife geht, wär das ja super.

Danke
Lisa
Moderator; Word seit Word 5.0 (für DOS)


Verfasst am:
29. Nov 2005, 14:11
Rufname:
Wohnort: Leipzig

AW: Mein erstes Script. Bitte Tipps und Kritik - AW: Mein erstes Script. Bitte Tipps und Kritik

Nach oben
       

Hallo Kepler,

es gibt verschiedene: Exit Sub beendet die ganze Prozedur, Exit For eine For-Schleife. Dann gibt es noch End, das alles beendet. Such mal in der Hilfe nach Exit-Anweisung, da findet sich das hier:
VBA Hilfe hat folgendes geschrieben:
Exit-Anweisung


Verläßt einen durch Do…Loop, For...Next, Function, Sub oder Property definierten Code-Block.

Syntax

Exit Do

Exit For

Exit Function

Exit Property

Exit Sub

Für die Syntax der Exit-Anweisung gibt es folgende Varianten:

Anweisung Beschreibung
Exit Do Bietet eine Möglichkeit zum Verlassen einer Do...Loop-Anweisung und kann nur innerhalb einer Do...Loop-Anweisung verwendet werden. Exit Do hat zur Folge, daß die Ausführung mit der ersten Anweisung in Anschluß an die Loop-Anweisung fortgesetzt wird. In verschachtelten Do...Loop-Anweisungen übergibt Exit Do die Steuerung an die Schleife der nächsthöheren (= aufrufenden) Verschachtelungsebene.
Exit For Bietet eine Möglichkeit zum Verlassen einer For-Schleife und kann nur in einer For...Next- oder For Each...Next-Schleife verwendet werden. Exit For hat zur Folge, daß die Ausführung mit der ersten Anweisung im Anschluß an die Next-Anweisung fortgesetzt wird. In verschachtelten For-Schleifen übergibt Exit For die Steuerung an die Schleife der nächsthöheren (= aufrufenden) Verschachtelungsebene.
Exit Function Verläßt die umgebende Function-Prozedur umgehend. Das Programm setzt die Ausführung mit der Anweisung fort, die auf die Anweisung folgt, mit der die Function-Prozedur aufgerufen wurde.
Exit Property Verläßt die umgebende Property-Prozedur umgehend. Das Programm setzt die Ausführung mit der Anweisung fort, die auf die Anweisung folgt, mit der die Property-Prozedur aufgerufen wurde.
Exit Sub Verläßt die umgebende Sub-Prozedur umgehend. Das Programm setzt die Ausführung mit der Anweisung fort, die auf die Anweisung folgt, mit der die Sub-Prozedur aufgerufen wurde.



Bemerkungen

Verwechseln Sie die Exit-Anweisungen nicht mit den End-Anweisungen. Exit definiert nicht das Ende einer Struktur.

_________________
Sei doch so nett und gib eine Rückmeldung, ob es klappt!
Gruß, Lisa

Guter Rat ist teuer!
kepler
Im Profil kannst Du frei den Rang ändern


Verfasst am:
29. Nov 2005, 14:34
Rufname:


AW: Mein erstes Script. Bitte Tipps und Kritik - AW: Mein erstes Script. Bitte Tipps und Kritik

Nach oben
       

ah super, warum hab ich das nicht gefunden? Ich hatte dies zwar mal aufgerufen, aber in dem Chaos in dem ich steckte hatte es gerade nicht so funktioniert wie ich wollte.

Jetzt hab ich ein neues Problem. In meinen Dokumenten gibt es auch Formatvorlagen die heißen "Textkörper - Einzug" und solche Sachen.
Da diese wohl als eingebaute Styles gelten, werden sie nicht von meinem Scrpt erfasst.
Jetzt wollte ich folgendes schreiben:

Code:

Dim kk As Style
For Each kk In myDoc.Styles
      If kk Like "Textkörper" Then myDoc.Styles(kk).Delete
Next kk


Das führt zu dem Fehler, es gibt diesen Style nicht. Ich habe verschiedene Syntaxvarianten ausprobiert, aber ohne Erfolg. Dies war übrigens überhaupt der Grund, warum ich oben zwei Arrays genommen habe um dort die Styles einzulesen.

Code:

myDoc.kk.Delete
myDoc.kk.Styles.Delete
kk.Delete
myDoc.Styles(kk.Text).Delete


führt alles nicht zum Erfolg. Wenn ich kk als Style definiere und aus myDoc.Styles auslese, müsste doch kk schon so etwas sein wie "myDoc.Styles(xy)" oder? Es müsste doch schon ein Style-Objekt an sich sein?
Wenn das nicht als Objekt geht, wie kann ich dann das kk-Objekt zu einem Text machen, den ich dann mit .Styles(kk.Text) ansprechen könnte?
CHF
Word-VBA Professional


Verfasst am:
29. Nov 2005, 14:38
Rufname:

AW: Mein erstes Script. Bitte Tipps und Kritik - AW: Mein erstes Script. Bitte Tipps und Kritik

Nach oben
       

Hi,

hast du dir mal die Hilfe zum Like-Operator angesehen?
Dort steht:

Zeichen in Muster|Steht in Zeichenfolge für
? Ein beliebiges einzelnes Zeichen.
* Kein oder mehrere Zeichen.
# Eine beliebige einzelne Ziffer (0 - 9).
[ZeichenListe] Ein beliebiges einzelnes Zeichen in ZeichenListe.
[!ZeichenListe] Ein beliebiges einzelnes Zeichen, das nicht in ZeichenListe enthalten ist.


Also:
If kk.NameLocal Like "Textkörper*" Then

_________________
Gruß

CHF

Bitte keine Anfragen per PN!
Fragen gehören ins Forum!
>
kepler
Im Profil kannst Du frei den Rang ändern


Verfasst am:
29. Nov 2005, 14:40
Rufname:

AW: Mein erstes Script. Bitte Tipps und Kritik - AW: Mein erstes Script. Bitte Tipps und Kritik

Nach oben
       

Ok, ich gebe zu der Vergleich hinkt noch, aber die Syntax für Styles(kk).Delete geht doch trotzdem nicht. Weil kk liest doch die tatsächlichen Styles aus, diese muß es also geben.
kepler
Im Profil kannst Du frei den Rang ändern


Verfasst am:
29. Nov 2005, 14:44
Rufname:

AW: Mein erstes Script. Bitte Tipps und Kritik - AW: Mein erstes Script. Bitte Tipps und Kritik

Nach oben
       

Ich habs jetzt so versucht. Alle Styles mit "Textkörper" werden jetzt gefunden. Dann habe ich noch eine Variable, die kk als String einliest. Aber es geht immer noch nicht.

Code:

Dim kk As Style
Dim xy As String
For Each kk In myDoc.Styles
    xy = kk
    If xy Like "Textkörper*" Then myDoc.Styles(xy).Delete
Next kk
CHF
Word-VBA Professional


Verfasst am:
29. Nov 2005, 14:48
Rufname:

AW: Mein erstes Script. Bitte Tipps und Kritik - AW: Mein erstes Script. Bitte Tipps und Kritik

Nach oben
       

hi,
aber sicher funktioniert das. Du solltest aber direkt mit dem Objektverweis kk arbeiten:

For Each kk In ActiveDocument.Styles
If kk Like "bla*" Then kk.Delete
Next kk

funktioniert prächtig. Probleme treten höchstens bei nicht löschbaren Styles auf...

_________________
Gruß

CHF

Bitte keine Anfragen per PN!
Fragen gehören ins Forum!
>
kepler
Im Profil kannst Du frei den Rang ändern


Verfasst am:
29. Nov 2005, 14:52
Rufname:

AW: Mein erstes Script. Bitte Tipps und Kritik - AW: Mein erstes Script. Bitte Tipps und Kritik

Nach oben
       

tja, bei mir nicht, kann es an Word '97 liegen?
Werd es mal mit 2003 ausprobieren, vielleicht geht es ja da.
CHF
Word-VBA Professional


Verfasst am:
29. Nov 2005, 14:56
Rufname:

AW: Mein erstes Script. Bitte Tipps und Kritik - AW: Mein erstes Script. Bitte Tipps und Kritik

Nach oben
       

wenn es nicht funktioniert solltest du die Fehlermeldung o.ä. mitteilen.

Unsere Kristallkugeln sind schon im Skiurlaub Smile

_________________
Gruß

CHF

Bitte keine Anfragen per PN!
Fragen gehören ins Forum!
>
kepler
Im Profil kannst Du frei den Rang ändern


Verfasst am:
29. Nov 2005, 15:01
Rufname:

AW: Mein erstes Script. Bitte Tipps und Kritik - AW: Mein erstes Script. Bitte Tipps und Kritik

Nach oben
       

Laufzeitfehler '5122':
Eine Formatvorlage mit diesem Namen ist nicht vorhanden

Mit einer MsgBox kk,,"" werden auch brav alle Formatvorlagen richtig erkannt.
CHF
Word-VBA Professional


Verfasst am:
29. Nov 2005, 15:08
Rufname:

AW: Mein erstes Script. Bitte Tipps und Kritik - AW: Mein erstes Script. Bitte Tipps und Kritik

Nach oben
       

dann verwendest du irgend einen Verweis falsch.
Sollte auch unter Word97 funktionieren.

Wie sieht der Code exakt mit allen Deklarationen nun aus?

_________________
Gruß

CHF

Bitte keine Anfragen per PN!
Fragen gehören ins Forum!
>
kepler
Im Profil kannst Du frei den Rang ändern


Verfasst am:
29. Nov 2005, 15:18
Rufname:

AW: Mein erstes Script. Bitte Tipps und Kritik - AW: Mein erstes Script. Bitte Tipps und Kritik

Nach oben
       

ich glaube ich weiß jetzt woran der Fehler liegt.
Wenn ich unter "Alle Formatvorlagen" nachsehe, gibt es dort eine Menge Styles, die auch "Textkörper*" beinhalten, aber im aktuellen Dokument gar nicht vorhanden sind. Wenn ich mit MsgBox abfrage, tauchen auch alle diese Textkörper-Styles auf. Also fällt mir jetzt nur ein, wieder die aktuellen in einen Array einzulesen und dann mit dem "Like" die tatsächlich vorhandenen Textkörper zu löschen.

Der Code sieht zZ. so aus:
Code:

Dim kk As Style

For Each kk In myDoc.Styles
     If kk Like "Textkörper*" Then kk.Delete
Next kk
CHF
Word-VBA Professional


Verfasst am:
29. Nov 2005, 15:28
Rufname:


AW: Mein erstes Script. Bitte Tipps und Kritik - AW: Mein erstes Script. Bitte Tipps und Kritik

Nach oben
       

Hi,

schau mal, ob dir die .InUse-Eigenschaft der Styles-Auflistung weiterhilft.

_________________
Gruß

CHF

Bitte keine Anfragen per PN!
Fragen gehören ins Forum!
>
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Gehe zu Seite 1, 2  Weiter
Diese Seite Freunden empfehlen

Seite 1 von 2
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Bekanntmachung: Word Tipps & Tricks: Bitte KEINE Fragen im Bereich Tipps und Tricks... 1 ezelda 11942 07. Jan 2005, 11:41
Willi Wipp Bitte KEINE Fragen im Bereich Tipps und Tricks...
Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten. Wichtig: Word Tipps & Tricks: Tipps Serienbriefe: Leerzeichen unterdrücken 1 ezelda 22462 25. Jul 2004, 13:26
faßnacht(IT); Tipps Serienbriefe: Leerzeichen unterdrücken
Keine neuen Beiträge Word Hilfe: XSL-Vorlage für ISO 690 Erstes Element und Datum 1 ChrissiHe 103 25. Jan 2014, 16:26
EPsi1 XSL-Vorlage für ISO 690 Erstes Element und Datum
Keine neuen Beiträge Word VBA Programmierung (Makros): Macro in mehreren Templates per Script o.ä. ändern 0 Kilmor 185 17. Okt 2012, 10:49
Kilmor Macro in mehreren Templates per Script o.ä. ändern
Keine neuen Beiträge Word VBA Programmierung (Makros): Vereinfachung VBA Script 18 initial 1312 28. Apr 2011, 21:13
initial Vereinfachung VBA Script
Keine neuen Beiträge Word Hilfe: Bitte Tipps für einen guten PDF-Umwandler 4 EHG 903 21. Apr 2011, 12:14
EHG Bitte Tipps für einen guten PDF-Umwandler
Keine neuen Beiträge Word Tipps & Tricks: Script Grafikkurs 1 G.O.Tuhls 2526 08. März 2011, 01:39
G.O.Tuhls Script Grafikkurs
Keine neuen Beiträge Word VBA Programmierung (Makros): Dateipfad in diesem Script per Dialog abfragen 0 seppwert 696 07. Jul 2010, 09:31
seppwert Dateipfad in diesem Script per Dialog abfragen
Keine neuen Beiträge Word Hilfe: ERSTELLUNG FORMULAR - STECKBRIEF - BITTE UM TIPPS 3 takeshi33 4170 21. Apr 2010, 22:00
G.O.Tuhls ERSTELLUNG FORMULAR - STECKBRIEF - BITTE UM TIPPS
Keine neuen Beiträge Word Hilfe: Wer kann erprobte Tipps geben... 2 phanck65 480 10. Nov 2009, 15:26
Werner72 Wer kann erprobte Tipps geben...
Keine neuen Beiträge Word VBA Programmierung (Makros): Perl Script ausführen / anstossen 3 030 1924 14. Okt 2009, 14:56
Gast Perl Script ausführen / anstossen
Keine neuen Beiträge Word VBA Programmierung (Makros): Seitenzahl in Fußzeile per Script zentrieren? 0 Lancelot 1283 16. Jun 2009, 13:41
Lancelot Seitenzahl in Fußzeile per Script zentrieren?
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Microsoft Project