Word Makro

Moderator: ModerationP

Word Makro

Beitragvon damienffm » 06. Aug 2021, 11:52

Hallo,
ich habe folgendes Problem, bei dem ich die Hilfe des Forums bräuchte, da ich bei VBA absoluter Anfänger bin.

Folgende Aufgabe:
Ich habe ein Word Dokument bei dem bestimmte Ausdrücke z.B <Anamnese> vorkommen oder auch nicht. Wenn sie vorkommen sollen sie als Textmarke gesetzt werden, wenn nicht soll das Sub einfach weiter laufen.

Hintergrund: Ich muss mehrere Textmarken setzen, wenn die Ausdrücke vorhanden sind läuft alles problemlos, wenn sie nicht vorhanden sind wird die Textmarke an der zuvor markierten Stelle gesetzt, was natürlich unpraktisch ist. Ich dachte mir, dass wenn der Suchtext nicht vorhanden ist einfach keine Textmarke gesetzt wird. Oder geht es nur so, dass ich überprüfe, ob ein bestimmter Text vorhanden ist, dann startet das Makro, wenn nicht, bricht es ab. (if ActiveDocument.???.Exists ("MakroName") = true Then Application.Run "MakroName")

Ich hoffe auf Eure Hilfe und schon mal Danke.

Alexander
damienffm
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 31
Registriert: 29. Apr 2020, 08:29
Wohnort: Frankfurt am Main

Re: Word Makro

Beitragvon theoS » 06. Aug 2021, 12:31

Das ist jetzt reichlich wirr, was du da schreibst.
Vor allem kann dir kein Mensch deine Frage beantworten, wenn er das Makron nich sieht.
Idealerweise ist noch ein Testdokument mit dabei.
Prinzipiell geht das natürlich, dass man das Dok vorher durchsucht ob das Schlüsselwort vorhanden ist, das erpart u.U. sogar eine Menge Zeit, denn alles andere muss sich ja um alle Ranges kümmern, während man eine Suche übers Gesamtdok vorneweg einfach mal schnell laufen lassen kann und beim ersten Fund abbrechen und den Rest Code starten.
Dass das was du beschreibst eintritt liegt zu ziemlicher Sicherheit daran, dass du mit dem Selection-Objekt arbeitest. Das ist nicht ideal.
Also:
Poste was du hast, dann kann man weitersehen.
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 5724
Registriert: 19. Apr 2008, 00:14

Re: Word Makro

Beitragvon damienffm » 06. Aug 2021, 13:05

Hallo,

danke erstmal.

Hier ein Testdokument. In diesem Dokument ist der Ausdruck Operationen nicht vorhanden, kann aber in einem anderen Dokument vorkommen. Durch das Makro wird die Textmarke Operationen angelegt, bei "Gehe zu" Textmarke Operation wird aber Vorerkrankungen angesprungen.

Ja, es wird das Selection Object verwendet, wie gesagt, ich bin Anfänger, vielleicht kann mir ja jemand erklären, wie es besser geht.

Viele Grüße
Alexander
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
damienffm
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 31
Registriert: 29. Apr 2020, 08:29
Wohnort: Frankfurt am Main

Re: Word Makro

Beitragvon theoS » 06. Aug 2021, 18:49

Faszinierend, dass in dem Dok Code ist. Hast du die Endung zu docX umbenannt?
Egal.
Kommt das Schlüsselwort denn öfter vor im Text, bzw. kann es öfter vorkommen?
Eine TM muss ja immer einmalig sein, die würde also beim letzten gefundenen Wort landen.
Ich bau dir das am WE mal um, dass es funktioniert.
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 5724
Registriert: 19. Apr 2008, 00:14

Re: Word Makro

Beitragvon theoS » 06. Aug 2021, 21:04

Probier mal das:
Code: Alles auswählen
Sub TMsetzen()
Dim dd1 As Document: Set dd1 = ActiveDocument
Dim rngDoc As Range, strArr As Variant, sI As Long, strNom As String
'in diesen Array kannst du jeden Begriff aufnehmen den du brauchst.
'sollte da noch ein anderes Sonderzeichen drin sein als der : und -
'kannst du unten noch eine Zeile mit Replace einfügen, TM's vertragen keine Sonderzeichen
strArr = Array("ITS-Aufnahmegrund:", "Aufnahmediagnose:", "Intensiv-Therapien:", _
"Vormedikation:", "Operationen:", "Vorerkrankungen:")

For sI = 0 To UBound(strArr) 'Das Array ist 0-basiert und die Ubound gibt dir immer die Anzahl der drin vorkommenden Elemente an
'hier kommt die Ersetzung der Sonderzeichen:
strNom = strArr(sI)
strNom = Replace(strNom, ":", "")
strNom = Replace(strNom, "-", "")

'da hier eine Schleife läuft, sparst du dir viel Kopiererei und viele Fehlerquellen
Set rngDoc = dd1.Content 'Hier wird vor jeder Suche der Suchbereich auf den Text des Doks gesetzt
rngDoc.Find.ClearFormatting
    rngDoc.Find.Replacement.ClearFormatting
    With rngDoc.Find
        .Text = strArr(sI) 'der Suchbegriff wird aus dem Array genommen
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    rngDoc.Find.Execute
If rngDoc.Find.Found = True Then  'hier dann die Entscheidung, wenn gefunden, setz die TM
    With dd1.Bookmarks
        .Add Range:=rngDoc, Name:=strNom 'die TM wird mit dem reduzierten Namen belegt
        'sollten die Namen ganz bestimmt vorbelegt sein, dann kannst du am Anfang auch
        'einen Array bilden der die Namen abbbildet. Sie müssen nur in der Nummerierung
        'gleichlaufen
    End With
End If

  Next sI 'dann zählt das weiter bis der Array mit den Suchbegriffen durch ist
End Sub
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 5724
Registriert: 19. Apr 2008, 00:14

Re: Word Makro

Beitragvon damienffm » 07. Aug 2021, 06:33

Ich danke Dir, werde ich gleich mal ausprobieren.
Um Deine Fragen zu beantworten, ja ich habe die Datei zu docx umbenannt, sonst hätte ich sie ja nicht schicken können. Ich dachte, ich stelle es so zur Verfügung wie ich es originär erzeugt habe, bevor ich aus Unwissenheit was falsch mache aber ich lerne dazu. Ja, die Überschriften kommen nur einmal oder gar nicht im Text vor.

Jedenfalls vielen Dank und ich melde mich wenn ich es ausprobiert habe. :D :D

Viele Grüße und ein schönes WE.

Alexander
damienffm
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 31
Registriert: 29. Apr 2020, 08:29
Wohnort: Frankfurt am Main

Re: Word Makro

Beitragvon theoS » 07. Aug 2021, 06:40

Habs gemerkt, nächstes Mal schreib was dazu.
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 5724
Registriert: 19. Apr 2008, 00:14

Re: Word Makro

Beitragvon damienffm » 07. Aug 2021, 16:24

Vielen vielen Dank es funktioniert super!

Dank Deiner Kommentare verstehe ich jetzt was wo passiert und kann auch Anpassungen durchführen, wie gesagt Danke

Schönes Wochenende
damienffm
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 31
Registriert: 29. Apr 2020, 08:29
Wohnort: Frankfurt am Main

Re: Word Makro

Beitragvon damienffm » 08. Aug 2021, 17:14

Ich fürchte, ich brauch noch einmal Deine Hilfe:

Ich habe Deinen Code, soweit ich das verstanden habe auf einen anderen Bedarf angepasst.

Sub NSTB()
' Nicht standarmäße Textblöcke formatieren
'
Dim dd1 As Document: Set dd1 = ActiveDocument
Dim rngDoc As Range, strArr As Variant, sI As Long, strNom As String
'in diesen Array kannst du jeden Begriff aufnehmen den du brauchst.
'sollte da noch ein anderes Sonderzeichen drin sein als der : und -
'kannst du unten noch eine Zeile mit Replace einfügen, TM's vertragen keine Sonderzeichen-
'kannst du unten noch eine Zeile mit Replace einfügen, TM's vertragen keine Sonderzeichen
strArr = Array("Visuelle-Analog-Skala:", "Verlaufs-Diagnosen:", "Operationen:", "Vorerkrankungen:", _
"Vormedikation:", "Sozialanamnese:", "CAM-ICU:", "Beatmungsform:", _
"Kontaktdaten-Angehörige:", "Betreuung:", "Betreuer-Angehörige:", "Vollmacht:", "Patientenverfügung:", "Isolationspflicht:", "Beatmungsparameter:", _
"Neuro-Status:", "Bewusstsein:", "Örtliche-Orientierung:", "Zeitliche-Orientierung:", "Situative-Orientierung:", "Orientierung-Person:", "Glasgow-Coma-Scale-Score:", _
"Verhaltensweise:", "Kardialer-Befund:", "Atmung:", "Befund-Pulmo:", "Abdomenbefund:", "Beatmungsparameter:", _
"Infektiologie:", "SOFA-Score:", "Beatmungsform:", "Beatmungsparameter:", "Temperatur:", "Wunden:", "VW-Wunde:", "Temperatur manuell:", _
"Abschlussbeurteilung Weaning:")

For sI = 0 To UBound(strArr) 'Das Array ist 0-basiert und die Ubound gibt dir immer die Anzahl der drin vorkommenden Elemente an
'hier kommt die Ersetzung der Sonderzeichen:
strNom = strArr(sI)
strNom = Replace(strNom, ":", "")
strNom = Replace(strNom, "-", "")
strNom = Replace(strNom, " ", "")

'da hier eine Schleife läuft, sparst du dir viel Kopiererei und viele Fehlerquellen
Set rngDoc = dd1.Content 'Hier wird vor jeder Suche der Suchbereich auf den Text des Doks gesetzt
rngDoc.Find.ClearFormatting
rngDoc.Find.Replacement.ClearFormatting
With rngDoc.Find
.Text = strArr(sI) 'der Suchbegriff wird aus dem Array genommen
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
rngDoc.Find.Execute
If rngDoc.Find.Found = True Then 'hier soll dann das Makro aufgerufen werden, das in strNom steht
Application.Run (strNom)
End If

Next sI 'dann zählt das weiter bis der Array mit den Suchbegriffen durch ist
End Sub

An der markierten Stelle soll dann das entsprechende Makro aufgerufen werden. Funktioniert leider so nicht. Was mache ich falsch?

Danke.

Alexander
damienffm
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 31
Registriert: 29. Apr 2020, 08:29
Wohnort: Frankfurt am Main

Re: Word Makro

Beitragvon theoS » 08. Aug 2021, 17:31

Strnom ist eine Variable, kein Makro.
Das läuft ja sobald du die Schleife durchläufst.
Die Replace-Funktion entfernt die Zeichen da gleich zu Anfang.
Wo ist da das Problem?
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 5724
Registriert: 19. Apr 2008, 00:14

Re: Word Makro

Beitragvon damienffm » 08. Aug 2021, 17:59

Ja, habe ich jetzt auch gemerkt, im Array müsste nach den dort stehenden Ausdrücken gesucht werden und dann das dazugehörige Makro aufgerufen werden.

Der Makro Name ist bei mir aber unterschiedlich zur Textmarke. Nütz umbenennen der Makros was?. Die Variable, die als strNom übergeben wird heißt anders als das aufzurufende Makro.
damienffm
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 31
Registriert: 29. Apr 2020, 08:29
Wohnort: Frankfurt am Main

Re: Word Makro

Beitragvon damienffm » 08. Aug 2021, 18:12

Ich probier grad was, sorry Denkfehler meinerseits, melde mich wenn es nicht klappt.
damienffm
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 31
Registriert: 29. Apr 2020, 08:29
Wohnort: Frankfurt am Main

Re: Word Makro

Beitragvon damienffm » 08. Aug 2021, 23:05

Also ganz hat das leider nicht geklappt, hier der geänderte Code und wo die Fehlermeldung kommt. Kann man das, was ich machen möchte (aus diesem Code heraus ein Makro starten) überhaupt so machen?

Sub NSTB()
'
' Nicht standarmäße Textblöcke formatieren
'
Dim dd1 As Document: Set dd1 = ActiveDocument
Dim rngDoc As Range, strArr As Variant, sI As Long, strNom As String
'in diesen Array kannst du jeden Begriff aufnehmen den du brauchst.
'sollte da noch ein anderes Sonderzeichen drin sein als der : und -
'kannst du unten noch eine Zeile mit Replace einfügen, TM's vertragen keine Sonderzeichen
strArr = Array("Visuelle-Analog-Skala:", "Verlaufs-Diagnosen:", "Operationen:", "Vorerkrankungen:", _
"Vormedikation:", "Sozialanamnese:", "CAM-ICU:", "Beatmungsform:", _
"Kontaktdaten-Angehörige:", "Betreuung:", "Betreuer-Angehörige:", "Vollmacht:", "Patientenverfügung:", "Isolationspflicht:", "Beatmungsparameter:", _
"Neuro-Status:", "Bewusstsein:", "Örtliche-Orientierung:", "Zeitliche-Orientierung:", "Situative-Orientierung:", "Orientierung-Person:", "Glasgow-Coma-Scale-Score:", _
"Verhaltensweise:", "Kardialer-Befund:", "Atmung:", "Befund-Pulmo:", "Abdomenbefund:", "Beatmungsparameter:", _
"Infektiologie:", "SOFA-Score:", "Beatmungsform:", "Beatmungsparameter:", "Temperatur:", "Wunden:", "VW-Wunde:", "Temperatur manuell:", _
"Abschlussbeurteilung Weaning:")

For sI = 0 To UBound(strArr) 'Das Array ist 0-basiert und die Ubound gibt dir immer die Anzahl der drin vorkommenden Elemente an
'hier kommt die Ersetzung der Sonderzeichen:
strNom = strArr(sI)
strNom = Replace(strNom, ":", "")
strNom = Replace(strNom, "-", "")
strNom = Replace(strNom, " ", "")

'da hier eine Schleife läuft, sparst du dir viel Kopiererei und viele Fehlerquellen
Set rngDoc = dd1.Content 'Hier wird vor jeder Suche der Suchbereich auf den Text des Doks gesetzt
rngDoc.Find.ClearFormatting
rngDoc.Find.Replacement.ClearFormatting
With rngDoc.Find
.Text = strArr(sI) 'der Suchbegriff wird aus dem Array genommen
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
rngDoc.Find.Execute
If rngDoc.Find.Found = True Then 'hier dann die Entscheidung, wenn gefunden, starte ein anderes Makro, das so heißt wie der Rückgabewert von strNom
Application.Run "strNom" 'Hier soll das Makro mit dem reduzierten Namen gestartet werden

End With 'Hier kommt die Fehlermeldung End with ohne with
End If

Next sI 'dann zählt das weiter bis der Array mit den Suchbegriffen durch ist
End Sub

Danke
Alexander
damienffm
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 31
Registriert: 29. Apr 2020, 08:29
Wohnort: Frankfurt am Main

Re: Word Makro

Beitragvon Gast » 08. Aug 2021, 23:52

'Hier kommt die Fehlermeldung End with ohne with


Einfach die Positionen von End If und End With tauschen.
:shock:


Code: Alles auswählen

Sub NSTB()
'
' Nicht standarmäße Textblöcke formatieren
'
    Dim dd1 As Document: Set dd1 = ActiveDocument
    Dim rngDoc As Range, strArr As Variant, sI As Long, strNom As String
    'in diesen Array kannst du jeden Begriff aufnehmen den du brauchst.
    'sollte da noch ein anderes Sonderzeichen drin sein als der : und -
    'kannst du unten noch eine Zeile mit Replace einfügen, TM's vertragen keine Sonderzeichen
    strArr = Array("Visuelle-Analog-Skala:", "Verlaufs-Diagnosen:", "Operationen:", "Vorerkrankungen:", _
                   "Vormedikation:", "Sozialanamnese:", "CAM-ICU:", "Beatmungsform:", _
                   "Kontaktdaten-Angehörige:", "Betreuung:", "Betreuer-Angehörige:", "Vollmacht:", "Patientenverfügung:", "Isolationspflicht:", "Beatmungsparameter:", _
                   "Neuro-Status:", "Bewusstsein:", "Örtliche-Orientierung:", "Zeitliche-Orientierung:", "Situative-Orientierung:", "Orientierung-Person:", "Glasgow-Coma-Scale-Score:", _
                   "Verhaltensweise:", "Kardialer-Befund:", "Atmung:", "Befund-Pulmo:", "Abdomenbefund:", "Beatmungsparameter:", _
                   "Infektiologie:", "SOFA-Score:", "Beatmungsform:", "Beatmungsparameter:", "Temperatur:", "Wunden:", "VW-Wunde:", "Temperatur manuell:", _
                   "Abschlussbeurteilung Weaning:")

    For sI = 0 To UBound(strArr)    'Das Array ist 0-basiert und die Ubound gibt dir immer die Anzahl der drin vorkommenden Elemente an
        'hier kommt die Ersetzung der Sonderzeichen:
        strNom = strArr(sI)
        strNom = Replace(strNom, ":", "")
        strNom = Replace(strNom, "-", "")
        strNom = Replace(strNom, " ", "")

        'da hier eine Schleife läuft, sparst du dir viel Kopiererei und viele Fehlerquellen
        Set rngDoc = dd1.Content    'Hier wird vor jeder Suche der Suchbereich auf den Text des Doks gesetzt
        rngDoc.Find.ClearFormatting
        rngDoc.Find.Replacement.ClearFormatting
        With rngDoc.Find
            .Text = strArr(sI)    'der Suchbegriff wird aus dem Array genommen
            .Replacement.Text = ""
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
            rngDoc.Find.Execute
            If rngDoc.Find.Found = True Then    'hier dann die Entscheidung, wenn gefunden, starte ein anderes Makro, das so heißt wie der Rückgabewert von strNom
                Application.Run "strNom"    'Hier soll das Makro mit dem reduzierten Namen gestartet werden

            End With   [quote] 'Hier kommt die Fehlermeldung End with ohne with[/quote]
        End If

    Next sI    'dann zählt das weiter bis der Array mit den Suchbegriffen durch ist
End Sub

Gast
 

Re: Word Makro

Beitragvon theoS » 09. Aug 2021, 05:51

Ich weiß nicht, welches Makro du da starten willst. Sehe keine Zeile Code davon.
Wenn es tatsächlich einen geben sollte ist es ungeschickt die gleichen Namen zu vergeben.
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 5724
Registriert: 19. Apr 2008, 00:14

Nächste

Zurück zu Word Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste