2

誰でもこのロジックの問題を見ることができますか?

正しいacqCodeが見つかったとしても、コードが次のページに進む無限ループに陥っているようです。

 flagFound = 0

 Do 
        If StrComp(temp1, acqCode) = 0 then 
            Print #iOutFileNum, "It's 1st!!!! :)" 
            flagFound = 1
        Elseif StrComp(temp2, acqCode) = 0 then
            Print #iOutFileNum, "It's 2nd!!!! :)" 
            flagFound = 1
        Elseif StrComp(temp3, acqCode) = 0 then
            Print #iOutFileNum, "It's 3rd!!!! :)" 
            flagFound = 1
        Elseif StrComp(temp4, acqCode) = 0 then
            Print #iOutFileNum, "It's 4th!!!! :)"
            flagFound = 1
        Elseif StrComp(temp5, acqCode) = 0 then
            Print #iOutFileNum, "It's 5th!!!! :)"
            flagFound = 1
        Elseif StrComp(temp6, acqCode) = 0 then
            Print #iOutFileNum, "It's 6th!!!! :)"
            flagFound = 1
        Else
            If flagFound = 0 then 
                'go to next page
            End If
        End If
    Loop Until flagFound = 1'to end Do While
4

3 に答える 3

1

ロジックをチェックすると、何も問題が見つかりません。の結果を見てみますstrcomp

strcomp("A ","A")文字列が画面上で同じに見える場合でも、1 を返します。おそらく atrim()が役立つでしょう。

大文字と小文字を区別しない方法 (例: ) で比較する必要がない限り"ABC" = "abc"、単純な文字列比較の方が読みやすい場合があります。このif..elseif..else構造は、次のように書き換えることもできます。select case

flagFound = 0
Do
    Select Case acqcode
        Case temp1
            Debug.Print "It's 1st!!!! :)"
            flagFound = 1
        Case temp2
            Debug.Print "It's 2nd!!!! :)"
            flagFound = 1
        Case temp3
            Debug.Print "It's 3rd!!!! :)"
            flagFound = 1
        Case temp4
            Debug.Print "It's 4th!!!! :)"
            flagFound = 1
        Case temp5
            Debug.Print "It's 5th!!!! :)"
            flagFound = 1
        Case temp6
            Debug.Print "It's 6th!!!! :)"
            flagFound = 1
        Case Else
            Debug.Print "next page"
    End Select
Loop Until flagFound = 1 'to end Do While
于 2012-08-21T20:34:33.690 に答える
0

また、自分の偽のデータを使用してロジックをチェックしました (テストには Excel を使用しましたが、別のアプリケーションを使用している場合でも、基本は同じです)。

正確なロジックを使用して、6 つの条件のいずれかで必要なページでループを終了させることができました。つまり、あなたの一般的なロジックは健全です。

変数がどのように設定されているか、temp*またはソース データが表示されているかを示していないため、有効な条件がないという結論に達する可能性が最も高いと言えます。

あなたのステートメントが無限ループであるために無視された可能性は他に1つだけあります。ループが実際には無限ではない可能性はありますか (ページが不足するか、オーバーフローまたはメモリ不足エラーが発生する場合)。Printループが無限でない場合は、ステートメントに問題がある可能性があります。それらを Debug.Print に置き換えてみてください。外部ファイルには書き込まないでください。正しく実行されている場合は、それが問題である可能性があります。それでも同じように動作する場合は、文字列の比較が決して真ではないという事実に問題があることを意味します。

ただし、ロックされているか、無限ループにあるように見える場合は、Printステートメントで書き込みを試みているファイルが開かれていない可能性があります。あなたはそれを示していませんが、Printステートメントを使用してファイルに書き込もうとする前に、次のことを行う必要があると思います:

fileNum = FreeFile ' next file number
Open file For Append As #fileNum  'or Output instead of append for a new file 
                                  ' (overwriting existing file)
于 2012-08-22T00:19:49.487 に答える
0

これを試して

flagFound = 0

Do 
    If StrComp(temp1, acqCode) = 0 then 
        Print #iOutFileNum, "It's 1st!!!! :)" 
        flagFound = 1
    Elseif StrComp(temp2, acqCode) = 0 then
        Print #iOutFileNum, "It's 2nd!!!! :)" 
        flagFound = 1
    Elseif StrComp(temp3, acqCode) = 0 then
        Print #iOutFileNum, "It's 3rd!!!! :)" 
        flagFound = 1
    Elseif StrComp(temp4, acqCode) = 0 then
        Print #iOutFileNum, "It's 4th!!!! :)"
        flagFound = 1
    Elseif StrComp(temp5, acqCode) = 0 then
        Print #iOutFileNum, "It's 5th!!!! :)"
        flagFound = 1
    Elseif StrComp(temp6, acqCode) = 0 then
        Print #iOutFileNum, "It's 6th!!!! :)"
        flagFound = 1
    End If

       If flagFound = 0 then 
            'go to next page
       End If

Loop Until flagFound = 1'to end Do While
于 2012-08-25T20:02:37.923 に答える