Weiß jemand, ob es eine VBA-Anweisung gibt, aufeinanderfolgende angrenzende Zeichen als "Wörter" zu erkennen, anstatt jedes Nicht-Alpha-Zeichen zu zählen (als ein Wort) auf dem Weg?Word VBA - Interpunktion ignorieren beim Zählen/Auswählen der X-Nummer von "Words" oder "Sentences"
Meine Forschung zeigt, dass die meisten Menschen, die Interpunktion und/oder Nicht-Alpha-Zeichen ignorieren wollen, konzentrieren sich auf das Trimmen oder die Auswahl der Zeichen. Ich möchte behalten diese Zeichen, aber ich möchte auch die Nicht-Alpha-Zeichen ignoriert während das Makro bestimmt, wie viele "Wörter" zu wählen.
Betrachten Sie die folgenden Beispiele für "visual" Worte im Vergleich zu "Wort Worte":
Frau Smith-Harris (visuell 2; Wort 5) 09.00 Uhr (visuell 2; Word-7) und/oder (visuell 1, Wort 3)
Ich habe Hunderte von Makros, auf die ich leicht (mit mnemonic Abkürzungen) über einen Textexpander zugreift, darunter Dutzende von Makros, die eine Handlung auswählen und durchführen (zB markieren, fett, Großbuchstaben, kursiv, lösch, usw.) auf unterschiedlichen Mengen von Text zu meiner Linken oder Rechten - etwas, das ich ziemlich häufig in meiner Transkriptions- und redigierenden Arbeit mache.
So könnte zum Beispiel mein Cursor rechts von Frau Smith-Harris sein, und vielleicht möchte ich es hervorheben oder es in Großbuchstaben schreiben oder es löschen. Es ist viel einfacher und schneller für meine Augen, diese Zeichenkette schnell als 2 "Wörter" (des angrenzenden Textes) zu bewerten, anstatt die langweilige Aufgabe zu unterbrechen, all die störenden Nicht-Alpha-Zeichen zu zählen, die Word als "Wörter" zählt Wählen Sie Text, um herauszufinden, dass es 5 Worte nach Word-Standards sind.
Obwohl der Text-Expander selbst alle Funktionen ausführen kann, die ich direkt aus dem Programm heraus ausführen möchte, ist es viel schneller und effizienter, stattdessen einen Word-Makro aufzurufen, um die Funktion auszuführen weil das Makro unerwünschte Räume intelligent von der Auswahl abschneiden kann
Aber leider, wenn ich zum Beispiel das Makro Highlight2PreviousWords (unten gezeigt) laufen lasse, während mein Cursor rechts von Frau Smith-Harris ist, würde es nur hervorheben "-Harris."
Hier sind zwei Beispiele meiner „wählen X Anzahl der Wörter“ Makros:
Sub h1lw_HighlightPrevious1Word()
Selection.MoveLeft Unit:=wdWord, Count:=1, Extend:=wdExtend
Dim oRng As Word.Range
Set oRng = Selection.Words(1)
Do While oRng.Characters.Last = " "
oRng.MoveEnd wdCharacter, -1
Loop
oRng.Select
Selection.Range.HighlightColorIndex = wdYellow
Selection.Collapse Direction:=wdCollapseEnd
End Sub
Sub h2lw_HighlightPrevious2Words()
'
Selection.MoveLeft Unit:=wdWord, Count:=2, Extend:=wdExtend
Dim oRng As Range
Set oRng = Selection.Range
Do While oRng.Characters.Last = " "
oRng.MoveEnd wdCharacter, -1
Loop
oRng.Select
Selection.Range.HighlightColorIndex = wdYellow
Selection.Collapse Direction:=wdCollapseEnd
End Sub
Alle meine „ein paar Worte wählen und dann etwas tun,“ Makros gleich aussehen, mit Ausnahme der „etwas tun“ Teil natürlich. So sehen alle Makros "Wähle 1 Wort nach links und mach etwas aus" wie das erste aus, und alle "Wähle 2+ Wörter links und tue etwas" sehen aus wie das zweite. Ich gehe normalerweise nicht über 5 Wörter hinaus, da ich in der Zeit, die darüber hinaus visuell zählt, den Text nur manuell auswählen kann.
Also die Makros funktionieren hervorragend für Straight-Text-Wörter, aber nicht so gut, wenn andere Charaktere in der Mischung sind. Ich würde gerne die Nicht-Alpha-Zeichen ignorieren und alle Strings des angrenzenden Textes als "Wörter" definieren.
Kennt jemand einen Weg, dies zu erreichen?
Wow. Einfach wow. Ich kann meinen Augen nicht einmal glauben. Ich habe es mit vielen verschiedenen Variationen getestet, und das funktioniert perfekt. Jeden. Single. Zeit. Was für ein Spiel! Jetzt los, um die Bazillion-Billion "Select X Worte" -Makros in meinem Repository zu dieser viel besseren Lösung zu ändern. Ich werde auch die RegEx-Option erkunden. Vielen Dank, Kazimierz! – HappyNanaMO