改善しようとしているMicrosoftWord用のVBAマクロがあります。
マクロの目的は、ドキュメントの最初のテーブルの検索語に一致するドキュメント内のすべての単語を太字および斜体にすることです。
問題は、検索語に次のワイルドカードが含まれていることです。
ハイフン「-」:文字の間にスペースまたはピリオドのワイルドカード
アスタリスク"&" :(これはイタリック体のマークダウンであるため、サイトではアスタリスクを入力できません。フィルターを回避するために、代わりに&記号を入力します)先頭の任意の数の文字のワイルドカード単語または最後に。ただし、通常のプログラミング言語とは異なり、単語の途中で使用する場合は、ハイフンと組み合わせて、文字範囲のワイルドカードにする必要があります。たとえば、「th&-e」は「there」をピックアップしますが、「th&e」はピックアップしません。
疑問符「?」:単一文字のワイルドカード
これまで私が行っているのは、これらの文字をテストすることだけです。文字が存在する場合は、アスタリスクの場合は文字を削除するか、単語を手動で検索する必要があることをユーザーに警告します。理想的ではない:-P
VBAで.MatchWildcardプロパティを試しましたが、まだ機能していません。検索テキストではなく、置換テキストと関係があるように感じます。
動作中のマクロは、入力として次のものを取ります(最初の行は意図的に無視され、2番目の列はターゲットの検索語を含む列です)。
これをすべて2番目の列のテーブルで想像してください(ここで許可されているhtmlではtrやtdなどは許可されていないため)
1行目:Word
2行目:検索
3行目:&earch1
4行目:Search2&
5行目:S-earch3
6行目:S?arch4
7行目:S&-ch5
そして、ドキュメントを検索し、次のように太字のイタリック体のコンテンツに置き換えます。
検索検索1検索2検索3検索4検索5
注:S-earch3はS.earch3を取得して、Search3に置き換えることもできます
通常、検索語が隣り合っていないことを想定しているかもしれませんが、マクロはすべてのインスタンスを検出する必要があります。
最初に機能したマクロの後に、試行したが機能しないコードも含めます。
動作するマクロのコードは、今日から1か月間、つまり2009年9月17日、次のURLのpastebinにあります。
あなたが提供しなければならないかもしれないどんな考えと助けにももう一度感謝します!
サラ
動作中のVBAマクロ:
Sub AllBold()
Dim tblOne As Table
Dim celTable As Cell
Dim rngTable As Range
Dim intCount As Integer
Dim celColl As Cells
Dim i As Integer
Dim rngLen As Integer
Dim bolWild As Boolean
Dim strWild As String
Set tblOne = ActiveDocument.Tables(1)
intCount = tblOne.Columns(2).Cells.Count
Set celColl = tblOne.Columns(2).Cells
strWild = ""
For i = 1 To intCount
If i = 1 Then
i = i + 1
End If
Set celTable = ActiveDocument.Tables(1).Cell(Row:=i, Column:=2)
Set rngTable = ActiveDocument.Range(Start:=celTable.Range.Start, _
End:=celTable.Range.End - 1)
rngLen = Len(rngTable.Text)
bolWild = False
If (Mid(rngTable.Text, rngLen, 1) = "&") Then 'remember to replace & with asterisk!'
rngTable.SetRange Start:=rngTable.Start, End:=rngTable.End - 1
End If
If (Mid(rngTable.Text, 1, 1) = "&") Then 'remember to replace & with asterisk!'
rngTable.SetRange Start:=rngTable.Start + 1, End:=rngTable.End
End If
If InStr(1, rngTable.Text, "-", vbTextCompare) > 0 Then
strWild = strWild + rngTable.Text + Chr$(13)
bolWild = True
End If
If InStr(1, rngTable.Text, "?", vbTextCompare) > 0 Then
strWild = strWild + rngTable.Text + Chr$(13)
bolWild = True
End If
If (bolWild = False) Then
Dim oRng As Word.Range
Set oRng = ActiveDocument.Range
With oRng.Find
.ClearFormatting
.Text = rngTable.Text
With .Replacement
.Text = rngTable.Text
.Font.Bold = True
.Font.Italic = True
End With
.Execute Replace:=wdReplaceAll
End With
End If
Next
If bolWild = True Then
MsgBox ("Please search the following strings with - or ? manually:" + Chr$(13) + strWild)
End If
End Sub
機能しないVBAマクロの試行:
Sub AllBoldWildcard()
Dim tblOne As Table
Dim celTable As Cell
Dim rngTable As Range
Dim intCount As Integer
Dim celColl As Cells
Dim i As Integer
Dim rngLen As Integer
Dim bolWild As Boolean
Dim strWild As String
Dim strWildcard As String
Set tblOne = ActiveDocument.Tables(1)
intCount = tblOne.Columns(2).Cells.Count
Set celColl = tblOne.Columns(2).Cells
strWild = ""
For i = 1 To intCount
If i = 1 Then
i = i + 1
End If
Set celTable = ActiveDocument.Tables(1).Cell(Row:=i, Column:=2)
Set rngTable = ActiveDocument.Range(Start:=celTable.Range.Start, _
End:=celTable.Range.End - 1)
rngLen = Len(rngTable.Text)
bolWild = False
If (Mid(rngTable.Text, 1, 1) = "&") Then 'remember to replace & with asterisk!'
rngTable.SetRange Start:=rngTable.Start + 1, End:=rngTable.End
End If
If InStr(1, rngTable.Text, "&", vbTextCompare) > 0 Then 'remember to replace & with asterisk!'
strWildcard = rngTable.Text
rngTable.Text = Replace(rngTable.Text, "&", "", 1) 'remember to replace & with asterisk!'
bolWild = True
End If
If InStr(1, rngTable.Text, "-", vbTextCompare) > 0 Then
strWildcard = Replace(rngTable.Text, "-", "[.-]", 1)
bolWild = True
End If
If InStr(1, rngTable.Text, "?", vbTextCompare) > 0 Then
strWild = strWild + rngTable.Text + Chr$(13)
strWildcard = Replace(rngTable.Text, "?", "_", 1)
bolWild = True
End If
If (bolWild = False) Then
Dim oRng As Word.Range
Set oRng = ActiveDocument.Range
With oRng.Find
.ClearFormatting
.Text = strWildcard
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchFuzzy = False
.MatchWildcards = True
With .Replacement
.Text = rngTable.Text
.Font.Bold = True
.Font.Italic = True
End With
.Execute Replace:=wdReplaceAll
End With
End If
Next
' If bolWild = True Then'
' MsgBox ("Please search the following strings with - or ? manually:" + Chr$(13) + strWild)'
' End If'
End Sub