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