2017-04-22 1 views
5

Ich arbeite an mehreren Word-Dokumenten, die ich konvertieren oder ersetzen Tabstopps zu Kommas. Der Text kann wie folgt aussehen:MS-Word VBA-Makro: Convert/Replace-Tab stoppt auf Komma

Word bietet 4 Optionen für Tabstopps: Punkt, Strich, Linie und keine. Allerdings möchte ich nur die ersten 3 Anführertypen in Komma ersetzen. Der letzte wird nicht so geändert werden:

Hello,world 
Hello,World 
Hello,World 
Hello   world 

Suchen und Ersetzen Tabs-Funktion in Word funktioniert nicht. So nach vielen Google-Suche, habe ich versucht, „Kopieren und Einfügen“ aus verschiedenen Quellen in ein einfaches Makro, diese Aufgabe zu tun (ich total bin neu in Word-Makro und VBA):

Sub Macro1() 
    For Each para In ActiveDocument.Content.Paragraphs 
     For Each aTab In para.TabStops 
      If aTab.Leader = wdTabLeaderDots _ 
      Or aTab.Leader = wdTabLeaderDashes _ 
      Or aTab.Leader = wdTabLeaderLines Then 
       TypeText = "," 
       aTab.Clear 
      End If 
     Next aTab 
    Next para 
End Sub 

Referenz: https://msdn.microsoft.com/en-us/library/office/ff192806.aspx

Word sagt, es gibt einen Fehler in der Zeile: TypeText = "," und ich weiß nicht, wie Sie es korrigieren.

Könnten Sie mir bitte mit diesem Makro helfen?

Vielen Dank im Voraus.

P/S: Slai hat eine Lösung für diese Frage. Ich änderte nur den zweiten Code in ein Makro kopiert, ein wenig, damit es funktioniert:

Sub Macro1() 
    Dim p As Paragraph, t As TabStop 

    For Each p In ActiveDocument.Paragraphs 
     For Each t In p.TabStops 
      If t.Leader Then p.Range.Find.Execute "^t", , , , , , , , , ",", wdReplaceAll 
     Next 
    Next 
End Sub 

Wenn Sie das Makro brauchen nur in Ihrer Auswahl mit den Absätzen zu arbeiten, benutzen Sie bitte Active in zur Auswahl ersetzen.

+0

vielleicht Finden und Ersetzen von Format http://www.officearticles.com/word/find_and_replace_styles_in_microsoft_word.htm – Slai

+0

@Slai Ich habe versucht, Feature in Word suchen und ersetzen, aber es funktioniert nicht in diesem Fall. – doquan0

Antwort

3

Suchen und Ersetzen Format nur scheint zu funktionieren, wenn die Tabulator-Positionen bekannt sind:

With ThisDocument.Range.Find 
    For L = wdTabLeaderDots To wdTabLeaderLines 
     .ParagraphFormat.TabStops.Add Position:=36, Leader:=L 
     .Execute "^t", , , , , , , , , ",", wdReplaceAll 
    Next 
End With 

Alternative sein kann, die Tabstopps jeden Absatz zu überprüfen (BTW WdTabLeader has 6 values):

Dim p As Paragraph, t As TabStop 

For Each p In ThisDocument.Paragraphs 
    For Each t In p.TabStops 
     If t.Leader Then p.Range.Find.Execute "^t", , , , , , , , , ",", wdReplaceAll 
    Next 
Next 
+0

Ich habe Ihren Code in ein neues Makro kopiert, führen Sie es aber es hat nicht funktioniert. Ich verstehe die Bedeutung des Teils "^ t",,,,,,,, "," in Ihrem Code nicht. Könnten Sie mir bitte mit einem detaillierteren Makro helfen? Ich bin völlig neu in Word Makro oder VBA. Ich habe gerade ein wenig über VBA oder Programmierung für ein paar Tage gelernt (basierend auf Google-Suche), um einige Probleme meiner Dokumente zu lösen. Danke im Voraus. – doquan0

+0

@ doquan0 Entschuldigung, habe vergessen zu antworten. Was meinst du damit, hat nicht funktioniert .. passiert überhaupt nichts? Sie können versuchen, 'ThisDocument' durch' ActiveDocument' zu ersetzen. '"^t "' ist das Sonderzeichen für Tab und '", "' ist der 10. Parameter 'ReplaceWith' https://msdn.microsoft.com/en-us/library/office/ff193977.aspx – Slai

+0

Der zweite Code Dim p As Paragraph ... Next Next funktioniert einwandfrei. Vielen Dank.Wie Sie gesagt haben, muss ich ThisDocument zu ActiveDocument im Code ersetzen, damit es funktioniert. Mein Kopfgeld ist abgelaufen, deshalb kann ich dir 50 Punkte Ruf nicht geben. Allerdings habe ich dies als eine akzeptierte Antwort markiert, um Ihnen meine Wertschätzung zu zeigen. – doquan0

1

TypeText ist eine Methode des Objekts Selection. Da Sie das Objekt nicht angeben, schlägt TypeText in Ihrem Code fehl. Da Sie auch das Objekt Selection nicht verwenden, können Sie TypeText überhaupt nicht verwenden. Ich schlage eine Struktur wie diese vor.

With Para.Range 
    .Collapse wdCollapseEnd 
    .Move wdCharacter, -1 
    .Text = "," 
End With 

würde Dieser Code ein Komma am Ende des Absatzes hinzufügen, die Sie auf die Frage bringt, wo Sie das Komma sein sollen. Sie wollen es an der Stelle der Registerkarte, die ein ganz anderes Tier ist als die TabStop. Ein Tab ist ein Chr (9), den Sie leicht ersetzen können. Wie jedoch Chr (9) interpretiert wird, hängt von dem Typ von TabStop ab, der davon abhängt, wo auf der Seite Chr (9) wirksam wird. Sie können das nicht durch die Untersuchung des Textes feststellen. Daher können Sie nicht zwischen den Typen TabStops unterscheiden, indem Sie sich den Text des Dokuments ansehen.

Um klar zu sein: Es ist nicht möglich ein TabStop mit einem Komma zu ersetzen, weil ein TabStop existiert nicht. Es ist möglich, Registerkarten durch Kommas zu ersetzen.

Es ist nicht möglich, den Leader eines bestimmten Tabs zu bestimmen, ohne dessen genaue Position im Text zu kennen.Beispiel: Wenn ein TabStop bei 100pts vom linken Rand existiert und eine Registerkarte in dem Raum wirksam wird 100pts vom linken Rand endet, lassen Sie uns 50pts sagen, und gibt es keine andere TabStop in der Region zwischen 50pts und 100pts aus der linke Rand, dann die Registerkarte im Dokument kann mit der TabStop bei 100pts festgelegt werden, deren Führer bestimmt, und ein Ersatz der Registerkarte (nicht die TabStop !!!) erlassen oder weggelassen.

Mit Kenntnis der genauen Position der Registerkarte im Dokument ist es nicht möglich, eine Verknüpfung zwischen ihr und einem der Tabstopps im Absatz zu erstellen. Da es nicht möglich ist zu bestimmen, welche wirksam werden könnte, ist es auch unmöglich, eine begründete Vermutung hinsichtlich irgendeiner seiner Eigenschaften zu machen. Ohne genaue Kenntnis der Position des Tabs in dem Dokument kann die einzige Entscheidung, die mit ihm getroffen werden kann, sein, ob er es ausführen oder ersetzen soll - bedingungslos.

+0

Ich habe Ihren Code nach der Zeile aTab.Clear hinzugefügt. Es fügt ein Komma vor dem letzten Zeichen des Absatzes ein, wie Hello (Tab) Worl, d. Ich habe festgestellt, dass die Zeile aTab.Clear in meinem Code eine normale Registerkarte erstellt. Wären Sie in der Lage, den Code so anzupassen, dass er vor oder nach dem neu erstellten normalen Tab ein Komma hinzufügt, wie Hello (Tab), World? – doquan0

+0

Ein Tab ist ein Zeichen wie jedes andere. Sie können danach suchen und es wie jedes andere ersetzen. Zu diesem Zweck würde man keinen Code wie oben beschrieben verwenden. Es ist nur zu finden und zu ersetzen. Bitte unterscheiden Sie deutlich zwischen Tabs und Tabstops. Sie können so viele Tabstopps in einem Absatz festlegen, wie Sie möchten, aber keiner von ihnen wird jemals wirksam werden, es sei denn, es gibt eine Registerkarte im Text. Welcher Tabstopp durch eine Registerkarte im Text aktiviert wird, hängt davon ab, wo in einer Zeile die Registerkarte platziert ist. – Variatus

+0

Danke für Ihren Kommentar. Ich verstehe den Unterschied zwischen Tabs und Tabulatoren. Wie du schon sagtest, nachdem ich einen Tabstopp gesetzt habe, muss ich die Tab-Taste auf meiner Tastatur drücken, um sie zu aktivieren. Die "normale" Registerkarte, die ich in meinem vorherigen Kommentar meine, ist, dass aTab.Clear alle Tabulatoren löscht und das Format aller Tabs zurücksetzt. Kein Punkt, kein Bindestrich und keine Zeile, auch der Platz für alle Tabs wird auf die Standardwerte von Word zurückgesetzt (0,5 Zoll oder 36 Punkte). – doquan0

Verwandte Themen