VBA の Range.Find メソッドに問題があります。コードが行っていることは、ワークブック内のすべてのワークシートを調べて、配列内のデータに一致するものを見つけ、そのデータと同じ値でセルの色を変更することです。
コードは最初のシートで完璧に機能します。次に、次のシートで、無限ループにハングアップします。コードをステップ実行した後、このページで初めて Find を実行すると、範囲形式 ("A2:A2") のアドレスが返されますが、その後はセル形式 ("A2") に戻ります。これは最初のページでは行われず、2 番目のページでのみ行われます。
返された値をチェックしてそれを削除するコードを書くこともできますが、パッチを適用するのではなく、問題を修正したいと考えています。
壊れるコードは次のとおりです。
For x = 1 To UBound(wksSheets)
For y = 0 To (UBound(findData) - 1)
With wkb.Worksheets(x)
Set rng = .Range(DataRange).Find(findData(y), LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
If Not rng Is Nothing Then
StrtAdd = rng.Address
Do
.Range(rng.Address).Interior.ColorIndex = 3
Set rng = .Range(DataRange).FindNext(rng)
Loop While Not rng Is Nothing And Not rng.Address = StrtAdd
End If
End With
Next y
Next x
2 ページ目の最初の rng.Address は「A2:A2」であり、StrtAdd に格納されます。次に、コードが .FindNext(rng) rng.Address にヒットすると、「A2」に変わります。このため、rng.Address がまったく同じセルについて話している場合でも、StrtAdd と等しくなることはありません。それが無限ループです。
これを修正する最善の方法についてのアイデアはありますか?
wksSheets は、ワークシート名を含む配列です
findData には、検索対象のデータが含まれています
前もって感謝します!!