2

今日、この興味深い問題に遭遇しました。別のループ内にループがあり、両方ともFind異なる目的で使用しています。何が起こるかというとFind、内側のループで使用するFindと、外側のループが台無しになります。私は、 が1つの検索インスタンスのみのメモリを保持していると推測しています。これを回避する方法はありますか、それとも設計上の問題ですか?

これが私のコードの短縮版です。

Sub Main()
    'Some boring stuff

    Set lst_rapports = Worksheets("mappingTRANSIT").range("lst_rapports")
    Set first_result = lst_rapports.Find(rap_choisi)
    Set active_result = first_result

    Sheets("req01").Unprotect "shoobidoowap"
    If Not first_result Is Nothing Then
        ' ...            
        Do
            Sheets("req01").Select            
            ' ...
            For i = 0 To 4
                Set rubrique_cell = range("E:E").Find(rub(i))
                If Not rubrique_cell Is Nothing Then
                    ' ...
                End If
            Next i                
            ' Yet more boring stuff...

            Set active_result = lst_rapports.FindNext(active_result)
        Loop Until active_result.Address = first_result.Address
    Else
        MsgBox "Impossible de trouver """ & rap_choisi & """ !"
    End If
    Sheets("req01").Protect "shoobidoowap"
End Sub

.Findfor ループでの の 2 番目の使用に注意してください。

最初の検索をある種の一時変数に保存し、その後元に戻す方法はありますか?

どうもありがとう。

4

1 に答える 1

5

FindNext(FindNext の MSDN)を実行すると、別の範囲に使用されていてもwhat、 の最後の呼び出しと同じものが自動的に使用されます。Find

これを修正するには、使用する代わりに

Set active_result = lst_rapports.FindNext(active_result)

使用する

Set active_result = lst_rapports.Find(rap_choisi,active_result)

于 2012-10-09T21:12:03.217 に答える