はじめに
本ページは、ウインドウズ系全般のティプスメモです。
そう、はじめはVB系のティプスメモだったのですが…いつの間にか、ウインドウズ系全般のティプスメモになってしまいました。
ちなみに、ティプス(Tips)とは、マニュアルに書かれていない技法や裏わざのことですが、本ページでは、私が経験してこれはと思ったノウハウのメモになっています。
尚、以下は本サイトの最新情報(ブログ)です。
それでは、本ページが何かのお役に立てれば幸いです。ごゆっくりご覧ください。
2009-08-07 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)を実行します。つまり、 割り込みを無視することができるのです。
おわりに
以下のページには、すべてのTIPSがあります。もしよろしければ、どうぞ!
尚、ご感想、ご意見、誤字、脱字、間違い等がありましたら遠慮なくVB-TIPS掲示板へご指摘ください。