私は、ある Word 文書の頭字語の表を解析し、別の Word 文書でこれらの頭字語が出現するたびに強調表示する Word マクロ (以下) をまとめているところです。これは機能しているようです。
ただし、括弧内にある頭字語とそうでない頭字語をマクロで区別したいと考えています。例えば、
兵士は無断欠勤 (AWOL) と見なされます。AWOLの職員は逮捕される可能性があります。
次のコードを使用して Do-While ループで最初に展開すると、見つかった頭字語を定義する範囲 "oRange" を評価できるようです。
oRange.SetRange 開始:=oRange.Start - 1、終了:=oRange.End + 1
ただし、解決策をコーディングしようとしてもうまくいかないようです (マクロが無限ループに陥るか、エラー メッセージが表示されます)。私は VBA プログラミングにかなり慣れていないので、ループがどのように動作しているかについて明らかに何かが欠けています。
私の質問は次のとおりです。その後の操作のために範囲「oRange」を複製する方法はありますか、それとも使用すべき他の方法がありますか?
ご協力いただきありがとうございます。
Sub HighlightAcronyms()
Dim wdDoc As Object
Dim wdFileName As Variant
Dim TableNo As Integer 'table number in Word
Dim oRow As Row
Dim oCell As Cell
Dim sCellText As String
Dim oDoc_Source As Document
Dim strListSep As String
Dim oRange As Range
Dim n As Long
Dim sCellExpanded As String
'Application.ScreenUpdating = False
strListSep = Application.International(wdListSeparator)
'*** Select acronym file and check that it contains one table
wdFileName = WordApplicationGetOpenFileName("*.docx", True, True)
If wdFileName = False Then Exit Sub '(user cancelled import file browser)
Set wdDoc = GetObject(wdFileName) 'open Word file
With wdDoc
TableNo = wdDoc.Tables.Count
If TableNo = 0 Then
MsgBox "The file """ & wdFileName & """ contains no tables.", _
vbExclamation, "Import Word Table"
ElseIf TableNo > 1 Then
MsgBox "The file """ & wdFileName & """ contains multiple tables.", _
vbExclamation, "Import Word Table"
End If
End With
'*** steps through acronym column
wdDoc.Tables(1).Cell(1, 1).Select
Selection.SelectColumn
For Each oCell In Selection.Cells
' Remove table cell markers from the text.
sCellText = Left$(oCell.Range, Len(oCell.Range) - 2)
sCellExpanded = "(" & sCellText & ")"
n = 1
'need to find foolproof method to select document for highlighting
Documents(2).Activate
Set oDoc_Source = ActiveDocument
With oDoc_Source
Set oRange = .Range
With oRange.Find
.Text = sCellText
.Forward = True
.Wrap = wdFindStop
.Format = False
.MatchCase = True
.MatchWildcards = False
Do While .Execute
If n = 1 Then
oRange.HighlightColorIndex = wdGreen
Else
oRange.HighlightColorIndex = wdYellow
End If
'trying to add code here to expand oRange and compare it to sCellExpanded
n = n + 1
Loop
End With
End With
Next oCell
Set wdDoc = Nothing
End Sub