簡體   English   中英

VBA從Excel中替換Word,包括頁眉,頁腳和腳注

[英]VBA Replace in Word from Excel including headers, footers and footnotes

我有一些Excel文件的數據,我想通過Excel VBA宏搜索替換為Word文檔。 有兩列:一列包含我想要查找的內容,另一列包含替換文本。 這很好。

問題是我想在HEADERS,FOOTERS,FOOTNOTES和ENDNOTES中更換。 我已經嘗試了一些來自互聯網的代碼,但是它沒有完成它的任務......任何幫助?

Sub ReplacetoWord()

Dim rngStory As Word.Range
Dim lngJunk As Long
Dim oShp As Shape
Dim name_book As String
Dim x As Variant
Dim Filename As String
Dim wArch As String

name_book = ThisWorkbook.FullName
x = Split(name_book, Application.PathSeparator)
Filename = x(UBound(x))

Sheets("Generate_Report").Select
wArch = Range("C3").Text & Range("C2").Text & ".docx"

Set objWord = CreateObject("Word.Application")
objWord.Documents.Open wArch
objWord.Visible = True

Workbooks(Filename).Activate
Worksheets("Generate_Report").Select

'Fix the skipped blank Header/Footer problem
lngJunk = ActiveDocument.Sections(1).Headers(1).Range.StoryType

For i = 1 To Range("I1").Value 'cell with the number of data to replace

Workbooks(Filename).Activate
Worksheets("Generate_Report").Select

datos = Range("B" & i).Text 'what to look for
reemp = Range("A" & i).Text 'what to replace with

  For Each rngStory In ActiveDocument.StoryRanges
    'Iterate through all linked stories
    Do
      With objWord.Selection.Find
       .Text = datos 
       .Replacement.Text = reemp 
       .Wrap = wdFindContinue
       .Execute Replace:=wdReplaceAll 
      End With
      On Error Resume Next
      Select Case rngStory.StoryType
      Case 6, 7, 8, 9, 10, 11
        If rngStory.ShapeRange.count > 0 Then
          For Each oShp In rngStory.ShapeRange
            If oShp.TextFrame.HasText Then
              With objWord.Selection.Find
                .Text = datos 
                .Replacement.Text = reemp 
                .Wrap = wdFindContinue
                .Execute Replace:=wdReplaceAll 
              End With
            End If
          Next
        End If
      Case Else
        'Do Nothing
      End Select
      On Error GoTo 0
      'Get next linked story (if any)
      Set rngStory = rngStory.NextStoryRange
    Loop Until rngStory Is Nothing
  Next


Next i

objWord.Activate


End Sub

使用Footnotes集合。

foreach (Microsoft.Office.Interop.Word.Footnote footnote in word.ActiveDocument.Footnotes)
{
     Microsoft.Office.Interop.Word.Range range = footnote.Range;
     range.Find.Text = "find me";
     range.Find.MatchWholeWord = true;
     range.Find.Execute(Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

     if (range.Find.Found == true)
     {
         // Whatever you need to do.
     }
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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