9

追跡しているかなりの数の数式とデータを含む Excel スプレッドシートがあります。選択したセルの参照元を見つける小さなマクロがありますが、すべての参照元を見つけることができるようにマクロを再帰的にしたいと思います。たとえば、セルにフォーカスを設定してこの関数を実行すると、セルが強調表示され、次にセルの前例が強調表示され、次にそれらのセルの前例が強調表示され、次に前例が強調表示されます...

私が現在抱えている問題は、エスケープ条件がどうあるべきかわからないことです。私はいくつかの無限ループの問題に遭遇しましたが、確実な解決策を見つけるのに十分なほど再帰に精通していません。

以下は、最初の先例を(正しく)見つけるために使用しているコードです。

Sub FindClosedWbReferences(inRange As Range)
Rem fills the collection With closed precedents parsed from the formula String
Dim testString As String, returnStr As String, remnantStr As String
testString = inRange.Formula
testString = RemoveTextInDoubleQuotes(testString): Rem New line
Set ClosedWbRefs = New Collection
Do
    returnStr = NextClosedWbRefStr(testString, remnantStr)
    ClosedWbRefs.Add Item:=returnStr, Key:=CStr(ClosedWbRefs.count)
    testString = remnantStr
    inRange.Select
    inRange.Interior.ColorIndex = 36

Loop Until returnStr = vbNullString

ClosedWbRefs.Remove ClosedWbRefs.count
End Sub

これは、次のようなメイン関数から呼び出されます。

 If homeCell.HasFormula Then
    Set OtherWbRefs = New Collection: CountOfClosedWb = 0
    Set SameWbOtherSheetRefs = New Collection
    Set SameWbSameSheetRefs = New Collection

    Rem find closed precedents from formula String
    Call FindClosedWbReferences(homeCell)

どんな助けでも大歓迎です。ありがとう

4

1 に答える 1