[英]VBA how to read heading style enumeration?
我有一個循環遍歷文檔段落並重新應用標題樣式的代碼。 這是為了解決從不同文檔復制粘貼標題后的編號不一致問題。
在我的文件中,我只有以下示例:
For Each p In ThisDocument.Paragraphs
If p.Style = "Heading 1" Then
p.Style = "Heading 1"
End If
Next p
這解決了問題,但問題是如果有人以不同的語言運行 Word,“標題 1”不再適用。 我也嘗試使用wdstyleheading1
,但是p.Style
總是讀出樣式的實際名稱,而不是枚舉。
我想到了p.Style.ListLevelNumber
,但這似乎太模糊了,可能會弄亂文檔中的其他列表。
有沒有辦法以獨立於語言的方式閱讀或引用它? 對於編號問題,是否有更好的解決方案?
您可以使用.NameLocal 獲取樣式的本地名稱。 這是一種解決方法,因為我認為您實際上無法將aparagraphs.Style 與枚舉進行比較,但這應該可以解決問題。
For Each p In ThisDocument.Paragraphs
If p.Style = ActiveDocument.Styles(wdStyleHeading1).NameLocal Then
p.Style = wdStyleHeading1
End If
Next p
很簡單:
For Each p In ThisDocument.Paragraphs
If p.Style = wdStyleHeading1 Then
p.Style = wdStyleHeading1
End If
Next p
也就是說,使用查找/替換比遍歷所有段落要快得多。
實際上,如果您在附加模板中的樣式定義是正確的,那么您甚至不需要宏。 您需要做的就是選中“開發人員|文檔模板>模板”下的“自動更新文檔樣式”選項。 使用該設置,您需要做的就是保存、關閉然后重新打開文檔。
否則,對所有 9 個標題 Styles 使用查找/替換:
Sub Demo()
Application.ScreenUpdating = False
Dim i As Long
With ActiveDocument.Range
'Style enumerations run from -2 (wdStyleHeading1) to -10 (wdStyleHeading9)
For i = -2 To -10 Step -1
With .Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = ""
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
.Format = True
.Style = i
.Replacement.Style = i
.Execute Replace:=wdReplaceAll
End With
Do While .Find.Execute
.Paragraphs(1).Range.Style = i
If .Information(wdWithInTable) = True Then
If .End = .Cells(1).Range.End - 1 Then
.End = .Cells(1).Range.End
.Collapse wdCollapseEnd
If .Information(wdAtEndOfRowMarker) = True Then .End = .End + 1
End If
End If
If .End = ActiveDocument.Range.End Then Exit Do
.Collapse wdCollapseEnd
Loop
Next
End With
Application.ScreenUpdating = True
MsgBox "Done."
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.