UBoundで要素がない配列を渡すには?

VB6,VBA,VBS,EXCEL,DOS,BAT,WSH,WORDの小技メモ

HTML/ CSS/ CGI-Perl/ JavaScript/ JavaApplet/ AccessUp/ Internet/ EnglishLearn/ ちゃいちゃん天使/ 天使メッセージ/ 飯田ワールド/ 結城ワールド/ プロフィール/ WEB相談室/ WEBアンテナ/ 燈明日記/ Perlノート/ 漢字起源/ yahoo

はじめに

本ページは、ウインドウズ系全般のティプスメモです。

そう、はじめは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掲示板へご指摘ください。

人のよいところをどんどん見つけよう