我有一些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
答案 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.
}
}