Empfohlener Beitrag

Microsoft Word 2013: 5 aufregende neuigkeiten

N ach einer Reihe von Einblicken, Microsoft letzten Monat endlich Windows 8 und die hausgebrauten Oberfläche Tablette, die von Windows Ph...

Freitag, 8. Februar 2013

Wort meldet. BaseStyle von Stilen ungenau

Das Problem

Word-Formatvorlagen -Kaskade . Out of the box, haben ein paar Stile keinen übergeordneten, aber die meisten sind auf einem anderen Stil basiert. In dem Objekt-Modell wird dies durch die gesteuert .BaseStyle Eigentum.
Eine der Regeln ist, dass eine Art nur auf einer anderen Art des gleichen Typs basieren. So kann ein Charakter Stil nur auf einem anderen Charakter Stil basieren. Eine Tabelle Stil kann nur auf einem anderen Tisch Stil basieren. Und so weiter.
Abfragen des .BaseStyle eines Style routinemäßig kehrt Unsinn. Öffnen Sie ein Dokument und versuchen Sie so etwas wie dieses:
  Sub TestBaseStyles ()

 Dim sty Wie Word.Style

     For Each sty In ActiveDocument.Styles
         "In einem sauberen Dokument, produziert dieser Unsinn
         Debug.Print sty.NameLocal, sty.BaseStyle
     Weiter sty

 End Sub
Sofern Ihr Style Objekt "grundiert" wurde in gewisser Weise das Lesen der .BaseStyle Anwesen produziert ungemilderte Unsinn:
  • Word 2003 berichtet, dass die meisten Arten auf Normal-Stil basieren. Klar Zeichenformate, Tabellen-und Listenstile nicht auf normalen beruhen, da es ein Absatzformat ist.
  • Word 2007 und Word 2010 scheint eine zufällige Stil wie der Bericht .BaseStyle . Tabelle Stile könnte sagen, sie sind auf den Charakter Stilen. Zeichenformate könnte sagen, sie sind auf Absatz Stilen.

Workaround

Der beste Weg, fand ich, dies zu umgehen habe, ist das Lesen .Description Eigenschaft vor dem Lesen der .BaseStyle Eigentum. Dies irgendwie "Primzahlen" die Style-Objekt und danach die berichten .BaseStyle genau.
So etwas wie dieses funktioniert sehr gut:
  Sub TestBaseStyles ()

 Dim sty Wie Word.Style

     For Each sty In ActiveDocument.Styles
         Debug.Print sty.NameLocal, sty.Description, sty.BaseStyle
     Weiter sty

 End Sub 
Sie haben noch an den Ausgang .Description in keiner Weise. Nur Lesen und Zuweisen einer Variablen tun wird. Something like this:
  Sub DoSomethingWithMyStyle ()

 Dim sty Wie Word.Style
 Dim SBeschreibung als String

     For Each sty In ActiveDocument.Styles
         "" Prime "der Stil
         SBeschreibung = sty.Description

         "Jetzt können wir lesen. BaseStyle
         MsgBox sty.BaseStyle
     Weiter sty

 End Sub 
Es gibt einige andere Eigenschaften von einem Stil, einen Stil in die Berichterstattung über die korrekte wird zu zwingen .BaseStyle . Deshalb ist dieses Problem nicht sehr häufig angezeigt: Ihr Code bereits eine der Eigenschaften, die den Stil niederlassen gelesen haben. Lesen der .Linked Eigenschaft eines Absatzes Stil, zum Beispiel, ist genug, um zu erzwingen, Word die berichten .BaseStyle genau.
Der Vorteil der Verwendung der .Description Eigenschaft ist, dass sie harmlos sein scheint und gilt für jeden Stil Art, so ist es einfach, in die Gewohnheit des Lesens der sich .Description vor dem Lesen der .BaseStyle .

Keine Kommentare:

Kommentar veröffentlichen