タイトル : Re^5: IDEノーエラー,exeにてエラー。 その他1件 投稿日 : 2015/02/02(Mon) 13:46 投稿者 : まさお
蛇足だと思いますが追記します。 > 間違っている箇所は判っています。 > For i = 0 To UBound(DimTs) > With DimTs(i) > If .flg Then Exit For > End With > Next > にてWith 〜 End With の中でループからExitしているからです。 > しかしこれだけではエラーにはなりません。 Private Sub f_Test(ByRef DimTs() As Type_T) Dim i As Long DimTs(0).flg = True For i = 0 To UBound(DimTs) With DimTs(i) If .flg Then Exit For End With Next End Sub に変えると「配列が固定されている」エラーにはなりません。 このエラーは Do While True For i = 0 To UBound(DimTs) With DimTs(i) If .flg Then Exit For End With Next If UBound(DimTs) < i Then Exit Do DimTs(i).flg = False Loop のように DoからExitすると発生します。 しかし「DoからExitする」だけでは発生しません。 Do While True For i = 0 To UBound(DimTs) With DimTs(i) If .flg Then Exit For End With Next Exit Do Loop のように単純にExit Doでもこのエラーはでません。 掲示コードは意味不明に見えるとは思います。 ただ、このエラーはこのようにしないと発生しないのでご容赦願います。 参考として元ソースにより近いコードを掲示します。 下記コードの方が何をしているのかは判り易いと思います。 下記コードでは余分な情報が多いのでそれを省略して最初のコードを掲示しました。 元ソースのタイプ文(抜粋) Private Type Type_T Strong As Boolean RDate As Date flg As Boolean End Type より元ソースに近いコード Dim IndexNewDay As Long, NewDay As Date Do While True IndexNewDay = -1 NewDay = #1/1/2000# For i = 0 To UBound(DimTs) With DimTs(i) If Not .flg Then 'Continue For ElseIf .Strong Then 'Strong最優先 IndexNewDay = i Exit For ElseIf NewDay < .RDate Then 'RDate最新優先 IndexNewDay = i NewDay = .RDate End If End With Next If UBound(DimTs) < i Then Exit Do '=====DimTs(IndexNewDay)に対する処理 DimTs(IndexNewDay).flg = False Loop 以上です。 |