tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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


以上です。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。