UBoundで要素がない配列を渡すには?
UBoundは、配列の最大インデックスを返す関数です。
なので、For文のリミット値によく使用します。
しかし、要素がない・・・つまり空の配列を渡すとエラー割り込みが発生するのです。
この場合のエラー割り込みは、エラーとしたくない時もありますね。
そんな時のために、local_UBound関数を作ってみました。
Private Sub CommandButton1_Click() Dim strA() As String Dim int_i As Integer ' For int_i = 0 To 10 Step 1 ' ReDim Preserve strA(int_i) ' strA(int_i) = "AAA" & int_i ' Next ' For int_i = 0 To UBound(strA) Step 1 ' Debug.Print int_i ' Next For int_i = 0 To local_UBound(strA) Step 1 Debug.Print int_i Next End Sub Function local_UBound(ByRef pArray) On Error Resume Next local_UBound = UBound(pArray) Select Case Err.Number Case 0 Case 9 local_UBound = -1 Case Else MsgBox Err.Description & "(" & Err.Number & ")", vbOKOnly + vbCritical, Err.Source End End Select End Function
◆ 補足
local_UBound関数の引数を『ByRef pArray』にしているのは、まず、配列なので参照渡し(ByRef)にしています。
そして、Asでデータ型指定をしないのは、いろいろな型に対応するためです。
UBoundした時に、要素があれば、Err.Numberは、0となり、なければ、9となります。
また、要素が無い時は、local_UBound関数は、-1を返します。
なので、For文のStep値 はプラス値でないとなりません。
あと、『On Error Resume Next』は、UBoundで割り込みエラーが起こっても、制御をシステムに渡さず、つぎの命令文(今回は Select Case)を実行します。つまり、 割り込みを無視することができるのです。