[Word] Tabstopp aus Makro ansprechen

Liebe ExpertInnen,

ich möchte in einer Zeile unterschiedliche Formatierungen verwenden: Den 1. Teil fett, Arial, 12 pt, dann ab einer Tabulatorposition Courier und 10 pt. Das geht zwar von Hand, es soll aber aus einem Makro heraus geschehen. Mir ist allerdings schleierhaft, wie der Makro erkennen könnte, wo die „Trennstelle“ sitzt bzw. ob der Tab überhaupt geeignet ist, als Bereichsgrenze zu fungieren. Wer weiß was?

Gruß Ralf

ich möchte in einer Zeile unterschiedliche Formatierungen
verwenden: Den 1. Teil fett, Arial, 12 pt, dann ab einer
Tabulatorposition Courier und 10 pt. Das geht zwar von Hand,
es soll aber aus einem Makro heraus geschehen. Mir ist
allerdings schleierhaft, wie der Makro erkennen könnte, wo die
„Trennstelle“ sitzt bzw. ob der Tab überhaupt geeignet ist,
als Bereichsgrenze zu fungieren. Wer weiß was?

Moin Ralf,

den Link von der Brettbeschreibung hast du schon durchsucht ?

Gruß
Reinhard

Moin Reinhard,

den Link von der Brettbeschreibung hast du schon durchsucht ?

danke, den kenne ich. Bevor ich mich da reinwühle, überzeuge ich meinen Vereinsvorstand, dass das alte Design gar nicht so schlecht ist.

Gruß Ralf

den Link von der Brettbeschreibung hast du schon durchsucht ?

danke, den kenne ich. Bevor ich mich da reinwühle, überzeuge
ich meinen Vereinsvorstand, dass das alte Design gar nicht so
schlecht ist.

Hi Ralf,

ja, gut suchen kann man da nicht.
Für den Code muß der Verweis aus MS Forms 2.0 gesetzt sein.

Sub ttt()
Dim myRange As Range, myData As New DataObject, Zeilen, N As Long
Set myRange = ActiveDocument.Range
myRange.WholeStory
myRange.Copy
myData.GetFromClipboard
Zeilen = Split(myData.GetText(1), Chr(13) & Chr(10))
Documents.Add
For N = 0 To UBound(Zeilen)
 Selection.Font.name = "Arial"
 Selection.Font.Size = 12
 If InStr(Zeilen(N), Chr(9)) \> 0 Then
 Selection.TypeText Text:=Left(Zeilen(N), InStr(Zeilen(N), Chr(9)) - 1)
 Selection.Font.name = "Courier"
 Selection.Font.Size = 10
 Selection.TypeText Text:=Mid(Zeilen(N), InStr(Zeilen(N), Chr(9)))
 Selection.TypeParagraph
 Else
 Selection.TypeText Text:=Zeilen(N)
 Selection.TypeParagraph
 End If
Next N
Selection.Font.name = "Arial"
Selection.Font.Size = 12
End Sub

Gruß
Reinhard

1 „Gefällt mir“

Hi Reinhard,

was der Makro tut, erschließt sich mir jetzt nicht ganz (vor allem nicht, wie ich ihn im Dunkeln laufen lassen könnte)), aber immerhin erkenne ich, dass der Tabulator als chr(9) auftritt. Das reicht mir schon, besternten Dank!

Gruß Ralf

Hallo Ralf,

ich hab mich nochmal daran probiert, diesmal kannst du den gewünschten Bereich selektieren, dann das Makro aufrufen.

Das Makro läuft schon korrekt, aber es gibt Probleme mit dem Tab durch die andere Schriftgröße.
Ich hatte zum Testen paar Zeilen mit jeweils zwei durch Tab getrennten Wörtern drinnen. D.h. die zweiten Wörter stehen sauber untereinander, alle so 6 cm vom linken Rand.
Also ist die Position der Tabfestlegung des ersten Tabs bei 6cm.

Jetzt wird das erste Wort mit pt12 größer formatiert. Wenn nun das Wort rechts über diese 6 cm kommt, so verschiebt Word den Tab um eine Tabfestlegung nach rechts.

Irgendwie geht das In Word,daß man über das Lineal oder so die Position der ersten Tabfestlegung verschieben kann. Vielleicht geht das auch über Vba, daß ma dann die Position des ersten tabs auf 8 cm setzt, damit alles wieder ordentlich untereinandersteht.

Probier einfach mal den Code, dann wirst du sehen was ich damit meinte/meine.

In der auskommentierten Codezeile habe ich versucht, das problem zu lösen indem ich jeden Tab durch einen zweifach-Tab ersetze, das klappt auch einmal, aber dann wird
myRange.Sentences(2)
nicht mehr gefunden, da durch die Einügung die Selection aufgehoben/verändert worden ist und es keine zweite Zeile (=Sentences(2) in der Selection mehr gibt.

Die einfachste Lösung ist, du überzeugst deine Leute, daß es viel hübscher ist wenn alles vor dem Tab die Schriftgröße 10 hat und das nach dem Tab die Schriftgröße 12, das klappt nämlich.

Sub ttt2()
Dim myRange, N As Long, C As Long, Pos As Long
Application.ScreenUpdating = False
Set myRange = Selection
For N = 1 To myRange.Sentences.Count
 Pos = InStr(myRange.Sentences(N), Chr(9))
 For C = 1 To Len(myRange.Sentences(N))
 If C \>= Pos Then
 myRange.Sentences(N).Characters(C).Font.name = "Courier"
 myRange.Sentences(N).Characters(C).Font.Size = 10
 Else
 myRange.Sentences(N).Characters(C).Font.name = "Arial"
 myRange.Sentences(N).Characters(C).Font.Size = 12
 End If
 Next C
 'myRange.Sentences(N) = Replace(myRange.Sentences(N), Chr(9), Chr(9) & Chr(9))
Next N
Application.ScreenUpdating = True
End Sub

Gruß
Reinhard

vor allem nicht, wie ich ihn im Dunkeln laufen lassen könnte)),

Hallo Ralf,

kein Problem, bei Conrad gibts Platinen mit einem Relais darauf,daß 230 Volt schalten kann. Gesteuert wird das über RS232, also die serielle Schnittstelle deines PCs.

Schließe so eine Platine an, ich such dann nach Vba-Code um das Licht ein- und auszuschalten :smile:)

Gruß
Reinhard

Spoiler
Moin, Reinhard,

Jetzt wird das erste Wort mit pt12 größer formatiert. Wenn nun
das Wort rechts über diese 6 cm kommt, so verschiebt Word den
Tab um eine Tabfestlegung nach rechts.

das macht mir keinen Kummer, weil ich genug Luft habe - das Wort, das vergrößert wird, ist immer kurz genug.

Meine Lösung arbeitet nicht zeichenweise, sondern lässt sich vom Word helfen, da kann man ja Wörter, Absätze, was auch immer beliebig markieren. Ich such mir also den Tab (in der Zeile ist nur einer), markiere nach links zum Zeilenanfang und formatiere den markierten Bereich:

Sub Makrotutnochmehr()
...
'-----------------------------------------------------------
 ' Gruppe anfetten
 Selection.HomeKey Unit:=wdStory
 Call sucheTab
 While rc
 Call formatiereMarkierung
 Call sucheTab
 Wend
...
End Sub

Sub formatiereMarkierung()

 Selection.MoveLeft Unit:=wdSentence, Extend:=wdExtend
 Selection.HomeKey Unit:=wdLine, Extend:=wdExtend
 ' Jetzt ist Bereich vor dem Tab markiert
 Selection.Font.Name = "Arial"
 Selection.Font.Bold = 2
 Selection.Font.Size = 12
 ' Cursor ans Zeilenende
 Selection.EndKey Unit:=wdLine
End Sub

Sub sucheTab()
'
 Selection.Find.ClearFormatting
 With Selection.Find
 .Text = "^t"
 .Replacement.Text = ""
 .Forward = True
 .Wrap = wdFindStop
 .Format = False
 .MatchCase = False
 .MatchWholeWord = False
 .MatchWildcards = False
 .MatchSoundsLike = False
 .MatchAllWordForms = False
 End With
 rc = Selection.Find.Execute
End Sub

Gruß Ralf