簡體   English   中英

VBA 如何讀取標題樣式枚舉?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM