既にフォーマットされているファイル (WinWord) のバッチがあり、どこでも論理的に一致するスタイルに同じ名前を使用したいと考えています。
VBA を介して多数の WinWord 2007 スタイルの名前を変更する方法はありますか、それとも手動でのみ行うことができますか?
私の質問について考える時間を割いていただきありがとうございます。マルセル
リンクされたスタイルの名前を変更する方法に関する重要な注意事項があります。スタイル自体の を介してスタイルの名前を変更するときに、偶然このトリックを見つけましたNameLocal
。名前の変更により、スタイルの文字書式も変更されました。リンクされたスタイルの場合、名前を変更するスタイルNameLocal
のを使用する必要がありますLinkStyle
。両方のタイプのスタイルの名前を変更する完全な関数を次に示します。Debug
どのスタイルがどのように名前変更されたかを確認するために使用されます。
Function rename_style(ByVal p_Styles As Styles, ByVal From_n As String, ByVal to_n As String) As Boolean
Dim v_Style As Style
On Error Resume Next
Set v_Style = p_Styles(From_n)
If Not v_Style Is Nothing Then
If v_Style.Linked Then
v_Style.LinkStyle.NameLocal = to_n
Else
v_Style.NameLocal = to_n
End If
Set v_Style = p_Styles(From_n)
'Accessing through p_Styles to avoid the use of the localized name
If v_Style Is Nothing Then
Debug.Print From_n; " -> "; to_n; " failed"
rename_style = False
Else
Debug.Print From_n; " -> "; to_n
rename_style = True
End If
Else
rename_style = False
Debug.Print From_n; " skipped"
End If
End Function
NameLocal プロパティに書き込むことで、ユーザー定義スタイルの名前を変更できるはずです。例えば:
ActiveDocument.Styles(3).NameLocal = "abbracadabra"
Styles コレクションの 3 番目のスタイルの名前を「abbracadabra」に変更します。これをどのように自動化するかは、名前の変更にロジックがあるかどうかによって異なります。
これは組み込みのスタイル (見出し 1 など) では機能しないと思います。代わりに、エイリアス スタイルが得られます。Word 2010 では、「[古いスタイル名]、[新しいスタイル名]」のようになります。私はそれらについてあまり知りません。
たとえば、各スタイル名に「-changed」を追加する場合は、次のようにします。
For Each aStyle in ActiveDocument.Styles
If aStyle.BuiltIn = False Then aStyle.NameLocal = aStyle.NameLocal & "-changed"
Next aStyle