VBA - Word/Excel

Hallo,

mal eine Frage. Ich tue mich schwer mit „For…Each“-Schleifen.

Nehmen wir folgende:

For Each wd In ActiveDocument.Range.Words


Next

Nun habe ich in wd den Text, den er mir Wort für Wort anzeigt. So weit, so gut.
Jetzt ist aber folgendes:

Wie kann ich aber heraus finden, WELCHES Wort ich gerade in der „Mache“ habe?
Also so, dass ich sagen könnte „ActiveDocument.Words(x).Select“ und x wäre die konkrete lfd. Nummer des Wortes.
Habe irgendwie noch nichts gefunden (Wald / Bäume).

Kann man auch anzeigen lassen, welches Zeichen zb der erste Buchstabe des Wortes ist (in der laufenden Character-Auflistung)? Also

Wort 1, Zeichen 1 („Haus“)
Wort 2, Zeichen 6 (Leerzeichen ist noch dazwischen) …

Gruß Tobi@s

Moin,

den er mir Wort für Wort anzeigt.

in einem einzigen String?

Mit solchen Fragen bist Du bei MSO besser aufgehoben.

Gruß
Ralf

Hallo Tobi@s

Ich weiss nicht genau, was Du willst und wo Du es willst: in Word oder in Excel? - Du schreibst „In ActiveDocument“, drum hier eine Spielerei am späten Abend mit einem Makro für Word.

Ich habe in einem Word-doc fogenden Satz geschrieben:

Franz, jagt: im. komplett; verwahrlosten Taxi quer durch Bayern.

Ueber dieses doc lasse ich folgendes Makro laufen:

Sub abc()
For Each wd In ActiveDocument.Range.Words
lwd = Left(wd, 1)
If Asc(lwd) = 13 Then GoTo fornext ’ Leerzeichen
If Asc(lwd) = 44 Then GoTo fornext ’ Komma
If Asc(lwd) = 46 Then GoTo fornext ’ Punkt
If Asc(lwd) = 58 Then GoTo fornext ’ Doppelpunkt
If Asc(lwd) = 59 Then GoTo fornext ’ Strichpunkt
MsgBox wd & " - " & lwd & " ist der 1. Buchstabe"
fornext:
Next
End Sub

Irgendwas in Deinem Sinn macht das Makro, glaub’ ich.
Grüsse Niclaus

1 Like

Hallo Niclaus,

danke für die Überlegungen.

Das hier war erst mal ein Beispiel (durchaus ein konkretes).

Also nochmal: Ich kann zb in Word sagen „For Wort = 1 To ActiveDocument.Words.Count“ und habe jetzt einen aktiven Zähler.
Mit „ActiveDocument.Words(Wort).Text“ kann ich das entsprechende Wort auslesen.

Wenn ich das ganze mit einer „For Each“-Schleife mache, habe ich diesen Zähler NICHT. Ich möchte aber dennoch wissen, an welchem Wort ich gerade bin. Ohne irgendwas auszulesen, ohne irgendwas zu zählen. Im ersten Beispiel weiß Word doch auch, dass das „25. Wort“ ‚soundso‘ heißt.
Also sollte es doch auch einen internen Zähler geben, der mir dann zb sagt wie das konkrete Item im Hintergrund benannt ist.

Also so in der Art:

For Each wd in ActiveDocukment.Range.Words
Msgbox "Das aktuelle Wort lautet " & wd.Item
Next

und sowas wie das „wd.Item“ suche ich.

Aber das gilt auch für alle anderen For Each-Schleifen. Wenn ich zb die Schriftarten auslesen möchte und mit einer For EachSchleife durch gehe, muss doch dennoch ein interner Zähler sein, der mir sagt, an welchem Item ich konkret bin.
Gruß

Hallo Tobi@s

Ich verstehe Dich so: In einer Schleife soll jedes Wort eines Dokuments aufgezählt werden und zwar in dieser Art: "Das 1. Wort heisst xxx. Das 2. Wort heiss yyy. usw. - Aber ich glaube nicht, dass Du das willst. Wenn doch, dann würde ich einen Zähler einbauen:

Sub abc()
nw = 0
For Each wd In ActiveDocument.Range.Words
'For Each wd In Selection.Range.Words
lwd = Left(wd, 1)
If Asc(lwd) = 13 Then GoTo fornext ’ Leerzeichen
If Asc(lwd) = 44 Then GoTo fornext ’ Komma
If Asc(lwd) = 46 Then GoTo fornext ’ Punkt
If Asc(lwd) = 58 Then GoTo fornext ’ Doppelpunkt
If Asc(lwd) = 59 Then GoTo fornext ’ Strichpunkt
n = n + 1
MsgBox "Das " & n & „. Wort heisst: " & wd & Chr(13) & _
lwd & " ist dessen 1. Buchstabe“
fornext:
Next
End Sub

Grüsse Niclaus

Eine generelle Frage habe ich: Wenn ich in einem Beitrag eine einzelne Makro-Zeile eingebe, schaut es so aus (Muster 1):

MsgBox "Das " & n & ". Wort heisst: " & wd & Chr(13) & _
    lwd & " ist dessen 1. Buchstabe"

Wenn ich das ganze Makro eingebe, schaut es so aus (Muster 2):

Sub abc()
      MsgBox "Das " & n & ". Wort heisst: " & wd & Chr(13) & _
        lwd & " ist dessen 1. Buchstabe"
fornext:
Next
End Sub

Was muss ich machen, dass auch ein ganzes Makro wie Muster 1 ausschaut?

Danke für Eure Hinweise. Niclaus

Hallo Niclaus,

wenn du deinen Code „schön“ formatieren möchtest, dann musst du beim Schreiben deines Beitrags den Code markieren und den Button „Vorformatierter Text“ (das ist der mit dem Icon </>) klicken.
Alternativ kannst du dich auch einfach nach der Markdown-Syntax richten, die du hier findest https://www.markdownguide.org/basic-syntax/#code.

Viele Grüße,
Christian

Hallo Christian
Vielen Dank. Da hatte ich ein Blackout - sonst hätte ich diesen Button schon längst sehen und benutzen müssen.
Grüsse Niclaus