2017-11-24 7 views
0

Ich habe 4000 Datensätze in meiner Wissensdatenbank, fast alle im Word-Format. Viele sind auf unsere voreingestellten Stile formatiert, von denen es etwa 20 gibt. Jetzt implementieren wir neue Stilnamen :(und ich möchte ein Makro schreiben, um Stapel von Sätzen zu betrachten, ändere 'Stil A' zu 'Neuer Stil A' ',' Style B 'zu' New Style B 'etc. Ich kann das tun, aber ich möchte fragen, wie der aktuelle Style-Name eines Absatzes einer unserer 20 voreingestellten Styles ist. Wenn ein Stilname ein Standard-Word-Stil oder ein Stil ist, der von woanders bezogen wird, möchte ich etwas anderes als das Konvertieren in einen neuen Stil tun. Vielen Dank!Prüfen von Stilnamen in Word anhand einer Liste erlaubter Stile

+0

Wenn Sie nur neue Art _Namen_ Implementierung sind, dann warum Sie nicht nur die Stile im Dokument _rename_? –

Antwort

0

Um den Stilnamen eines ausgewählten Absatzes zu finden, verwenden Sie :

Selection.ParagraphFormat.Style.NameLocal ' or Name 

auf einem integrierten Stil, den Einsatz umgehen:

ActiveDocument.Styles(wdStyleNormal) 

mit wdStyleNormal einen eingebauten in Word konstant, von denen es viele für alle (die meisten) sind der Standard-Stile. Sie können einen Style-Namen verwenden, um an einem Ihrer eigenen (nicht integrierten) Styles zu arbeiten. Lookup Styles in Hilfe für Details.

Das folgende Makro Ich verteile verwendet (Kopie) Stile aus einer vorbereiteten Vorlage auf die Vorlage Normal Benutzer:

Sub CopyStyles() 
Dim n, src, dst 
    ' 
On Error Resume Next 
    src = ActiveDocument.AttachedTemplate.FullName 
    dst = NormalTemplate.FullName 
    ' 
    ' Copy styles 
    ' 
    n = ActiveDocument.Styles(wdStyleNormal).ParagraphFormat.SpaceBefore 
    ActiveDocument.Styles(wdStyleNormal).ParagraphFormat.SpaceBefore = 0 
     Application.OrganizerCopy Source:=src, Destination:=dst, Object:=wdOrganizerObjectStyles, Name:=ActiveDocument.Styles(wdStyleNormal).NameLocal 
    ActiveDocument.Styles(wdStyleNormal).ParagraphFormat.SpaceBefore = n 
    Application.OrganizerCopy Source:=src, Destination:=dst, Object:=wdOrganizerObjectStyles, Name:=ActiveDocument.Styles(wdStyleHeading1).NameLocal 
    Application.OrganizerCopy Source:=src, Destination:=dst, Object:=wdOrganizerObjectStyles, Name:=ActiveDocument.Styles(wdStyleHeading2).NameLocal 
    Application.OrganizerCopy Source:=src, Destination:=dst, Object:=wdOrganizerObjectStyles, Name:=ActiveDocument.Styles(wdStyleHeading3).NameLocal 
    Application.OrganizerCopy Source:=src, Destination:=dst, Object:=wdOrganizerObjectStyles, Name:=ActiveDocument.Styles(wdStyleHeading4).NameLocal 
    Application.OrganizerCopy Source:=src, Destination:=dst, Object:=wdOrganizerObjectStyles, Name:=ActiveDocument.Styles(wdStyleHeading5).NameLocal 
    Application.OrganizerCopy Source:=src, Destination:=dst, Object:=wdOrganizerObjectStyles, Name:=ActiveDocument.Styles(wdStyleHeading6).NameLocal 

    Application.OrganizerCopy Source:=src, Destination:=dst, Object:=wdOrganizerObjectStyles, Name:=ActiveDocument.Styles(wdStyleTOC1).NameLocal 
    Application.OrganizerCopy Source:=src, Destination:=dst, Object:=wdOrganizerObjectStyles, Name:=ActiveDocument.Styles(wdStyleTOC2).NameLocal 
    Application.OrganizerCopy Source:=src, Destination:=dst, Object:=wdOrganizerObjectStyles, Name:=ActiveDocument.Styles(wdStyleTOC3).NameLocal 
    Application.OrganizerCopy Source:=src, Destination:=dst, Object:=wdOrganizerObjectStyles, Name:=ActiveDocument.Styles(wdStyleTOC4).NameLocal 
    Application.OrganizerCopy Source:=src, Destination:=dst, Object:=wdOrganizerObjectStyles, Name:=ActiveDocument.Styles(wdStyleTOC5).NameLocal 
    Application.OrganizerCopy Source:=src, Destination:=dst, Object:=wdOrganizerObjectStyles, Name:=ActiveDocument.Styles(wdStyleTOC6).NameLocal 

End Sub 
+0

Danke @Paul. Mein Makro lädt den Punkt, der die neuen Stile enthält, und die Stiländerungen funktionieren OK. Aber was ich tun möchte, ist jeden Absatz zu befragen und zu sehen, ob sein Stil einer meiner oder einer eingebauten ist. So ähnlich wie in Excel. Ich denke, ich könnte 'if old_para_style = my_style_1 oder old_para_style = my_style_2 ... ... ... my_style_20' codieren, aber das ist nicht sehr elegant und würde wahrscheinlich lange dauern. Gibt es einen eleganteren Weg? – hmm

+0

Sie können einen 'Select-Fall old_para_style \ Case my_style1 .... \ Case Default: .... \ End Select' wählen. Dadurch kann VB den Zeichenfolgenabgleich optimieren. –

+0

Danke @Paul - Ich werde es versuchen – hmm

0

Vielleicht verstand ich Ihre Frage falsch. Hier sind ein paar Beispiele, die vielleicht mehr in Richtung ist, was man sucht:

Sub test() 
Dim para As Paragraph 

    ' rename a style of the document 
    ' 
    On Error GoTo lbl_NoSuchStyle 
     ActiveDocument.Styles("TestStyle1").NameLocal = "TestStyle2" 
    On Error GoTo 0 
lbl_NoSuchStyle: 
    ' 
    ' Check styles of all paragraphs 
    ' 
    For Each para In ActiveDocument.Paragraphs 
     Select Case para.Format.Style.NameLocal 
      Case "Req" 
       Debug.Print "Isa Req" 
      Case "TestStyle2" 
       para.Style = wdStyleHeading3 ' change style to another style 
      Case Else 
       Debug.Print "Unknown Style" 
     End Select 
    Next para 

End Sub 
+0

Danke @Paul I up-arrowed eine deiner Antworten, aber nicht öffentlich angezeigt, da ich zu wenige Beiträge habe .. – hmm

Verwandte Themen