VBA从Excel中替换Word,包括页眉,页脚和脚注

时间:2017-03-24 08:24:27

标签: excel vba replace ms-word header

我有一些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

1 个答案:

答案 0 :(得分:0)

使用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.
     }
 }