Word VBA: Rich-Text-Steuerelement formatieren per TAG

Moderator: ModerationP

Word VBA: Rich-Text-Steuerelement formatieren per TAG

Beitragvon netforward » 14. Dez 2019, 14:38

Hallo, ich habe ein Richt-Text-Steuerelement mit dem TAG "Absenderadresse". Dort wird das Steuerelement mit folgenden String befüllt: Firma, Straße, PLZ, Ort.
Jetzt möchte ich gerne, wenn das Inhaltssteuerelement befüllt wird, die Firmenbezeichnung fett und die restliche Adresse normal in Arial und Schriftgröße 7 formatiert wird.
Ich habe ein Code gefunden, wo das ERSTE Inhaltssteuerelement ab dem 20. Zeichen anders formatiert werden kann. Das wäre eigentlich schon genau meine Lösung.
Aber: Ich möchte nicht das erste Inhaltssteuerelement formatieren, sondern ein bestimmtes mit dem TAG "Abenseradresse". Habe es aber noch nicht hinbekommen,
dass nach TAG umzuschreiben. Kann mir da jemand helfen? Anbei der Code:

Code: Alles auswählen
How to Format Part of Content Controls in Word VBA

Sub FormatContentControl()

Dim oCC As ContentControl
Dim oCCRange As Range
Dim oCCRngFormat As Range
Dim oChr As Range

Set oCC = ActiveDocument.ContentControls(1)
oCC.Type = wdContentControlRichText
Set oCCRange = oCC.Range
Set oCCRngFormat = oCCRange.Duplicate
oCC.LockContentControl = False
oCC.LockContents = False
oCCRngFormat.Start = 20
oCCRngFormat.End = oCCRange.End

For Each oChr In oCCRngFormat.Characters
   oChr.Font.Bold = True
Next oChr

oCCRngFormat.Font.Bold = -1
oCCRngFormat.Font.Underline = WdUnderline.wdUnderlineSingle

oCCRngFormat.Start = oCCRange.End
oCCRngFormat.Font.Bold = 0
oCCRngFormat.Font.Underline = WdUnderline.wdUnderlineNone

End Sub
netforward
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 10
Registriert: 17. Sep 2018, 18:27

Re: Word VBA: Rich-Text-Steuerelement formatieren per TAG

Beitragvon theoS » 14. Dez 2019, 23:11

Es ist vermutlich einfacher, das CC über den Index anzusprechen. Was machst du, wenn das CC einer kopiert? Dann hast du den Tag zweimal drin :-)
Aber, es gibt eine Lösung.
Hier hab ich das mit dem Titel angesprochen:
viewtopic.php?f=162&t=737103&hilit=content#p3063193
Da gibts ein Äquivalent für den Tag
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4924
Registriert: 19. Apr 2008, 00:14

Re: Word VBA: Rich-Text-Steuerelement formatieren per TAG

Beitragvon netforward » 15. Dez 2019, 11:32

Stimmt, besser wäre es sicherlich, das über eine eindeutige ID statt über den Tag laufen zu lassen.
Ob jetzt über Tag, Titel oder ID der String ausgelesen wird, bei keine der Methoden schaffe ich es, den Code entsprechend dem Beispiel an meine Bedürfnisse anzupassen... :cry:
netforward
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 10
Registriert: 17. Sep 2018, 18:27

Re: Word VBA: Rich-Text-Steuerelement formatieren per TAG

Beitragvon netforward » 15. Dez 2019, 12:44

So habe es jetzt doch alleine hinbekommen - über die eindeutige ID. Nach dem Firmnamen in fett, wird der Rest des Textes ab 14. Zeichen normal geschrieben... :P
Die ID habe ich über ein HIlfsmakro ermitteln lassen. Ticket kann als gelöst markiert werden...

Code: Alles auswählen
Sub FormatContentControl()

Dim oCC As ContentControl
Dim oCCRange As Range
Dim oCCRngFormat As Range
Dim oChr As Range

Set oCC = ActiveDocument.ContentControls("1208303553")
oCC.Type = wdContentControlRichText
oCC.Range.Text = "Meine Firma · 12345 Musterstadt"
Set oCCRange = oCC.Range
Set oCCRngFormat = oCCRange.Duplicate
oCC.LockContentControl = False
oCC.LockContents = False
oCCRngFormat.Start = oCCRngFormat.Start + 14
oCCRngFormat.End = oCCRange.End

For Each oChr In oCCRngFormat.Characters
    oChr.Font.Bold = False
Next oChr

oCCRngFormat.Font.Bold = 0
oCCRngFormat.Font.Underline = WdUnderline.wdUnderlineNone

oCCRngFormat.Start = oCCRange.End
oCCRngFormat.Font.Bold = 1
oCCRngFormat.Font.Underline = WdUnderline.wdUnderlineNone

End Sub


Und anbei das Hilfsmakro für die eindeutige ID-Ermittlung des ausggwählten Inhaltssteuerelementes:

Code: Alles auswählen
Sub ScratchMacroI()
'A basic Word macro coded by Greg Maxey
'To get a CCs unique ID, select is tab and run this macro:
  MsgBox Selection.Range.ContentControls(1).ID
  Debug.Print Selection.Range.ContentControls(1).ID
End Sub
netforward
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 10
Registriert: 17. Sep 2018, 18:27

Re: Word VBA: Rich-Text-Steuerelement formatieren per TAG

Beitragvon theoS » 15. Dez 2019, 23:35

So gehts auch. :-)
Wenn du das mit dem Tag noch mal versuchen möchtest, dann schau dir mal diese Lösung an.#

Code: Alles auswählen
Sub rtfDingens()
Dim dd1 As Document: Set dd1 = ActiveDocument
Dim rtfE1 As ContentControl, lngSt As Long, lngE As Long
Dim rngS As Range, rngB As Range

Set rtfE1 = dd1.SelectContentControlsByTag("RTFdings").Item(1)  'das CC hat den Tag RTFdings
Set rngS = rtfE1.Range  'brauchst du um den STart und das Ende des CC-Ranges zu kriegen
lngSt = rngS.Start: lngE = rngS.End 'hier in Variablen geschrieben
Set rngB = dd1.Range(lngSt, lngSt + 14)  'die ersten 14 Zeichen in einen eigenen Range gepackt
rngB.Font.Bold = True
rngB.Font.Size = 14
Set rngB = dd1.Range(lngSt + 15, lngE)  'jetzt das ganze nach dem 14. Zeichen klein und nicht fett.
With rngB.Font
 .Bold = False
 .Size = 7
 .Name = "Arial"
End With
End Sub
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4924
Registriert: 19. Apr 2008, 00:14


Zurück zu Word Forum (provisorisch)

Wer ist online?

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