掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
配列を判定するには? (ID:102925)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>If IsArray(cControl.Index) Thenにしてもエラーとなります。 IsArray関数の使い方が正しくありません。 ウォッチリストでLabel1のIndexプロパティを見ると、確かに「<配列ではないオブジェクトです。>」と表示されます。しかし、コントロールにIndexプロパティを指定した場合に配列として扱われるのはコントロールの変数であり、Indexプロパティではありません。つまり、IsArray(cControl)とするべきです。 が、しかし、VB6での、Indexプロパティの指定により配列化したコントロールは、IsArray関数での配列判定が出来ません。何故かは知りませんが。 試しに、以下のコードを実行してみて下さい。 Call MsgBox(CStr(IsArray(Label2))) Indexプロパティにより配列化したはずのLabel2ですが、Falseが返ります。 ですので、これはもはや「On Error」ステートメントを使うしかないでしょう。 ---------------- 以下、ソースコード ---------------- Option Explicit Private Sub Command1_Click() Dim cControl As Control For Each cControl In Me.Controls If TypeOf cControl Is Label Then '******** 追加 ******** On Error Resume Next 'エラー無視 Dim strIndex As String strIndex = "(" & cControl.Index & ")" If Err.Number <> 0 Then If Err.Number = 343 Then '"配列ではないオブジェクトです" strIndex = "" Else GoTo Err_Trap '予期しないエラーの場合は終了 End If End If On Error GoTo 0 'エラー無視の終了 '******** 追加 ******** Debug.Print cControl.Name & strIndex End If Next cControl Exit Sub '予期しないエラーが発生した場合のエラートラップ Err_Trap: Call MsgBox(Err.Description, vbOKOnly Or vbCritical) End Sub ---------------- 以上、ソースコード ---------------- 他にも解決策はあるかもしれませんが、それが見つかるまではこの方法でやって見てはいかがでしょうか。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.