掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
配列を判定するには? (ID:102926)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
コントロール配列かどうかを確認するには、以下のようにします。 Dim cControl As VB.Control For Each cControl In Me If TypeOf cControl Is Label Then If TypeOf Me(cControl.Name) Is VB.Control Then Debug.Print cControl.Name Else Debug.Print cControl.Name & "(" & cControl.Index & ")" End If End If Next コントロール配列にしていない Label1 と コントロール配列として作った Label2(0) があるとします。 この場合の Label2 は、実はコントロールではありません。 Debug.Print TypeName(Label1) 'Label と表示される Debug.Print TypeName(Label2) 'Label ではない! Debug.Print TypeName(Label2(0)) 'Label と表示される ですから、Me.Controls("Label2") のデータ型を調べてみて、 それが Label や Control 型では無かった場合、それは コントロール配列であるという事がわかるというワケです。 > If IsArray(cControl.Index) Thenにしてもエラーとなります。 そもそも、Index にアクセスできないのですから、これでは駄目でしょう。 それに、Index プロパティの戻り値は Integer 型であり、 どちらにせよ配列ではありません。 > ”配列ではないオブジェクトです”エラーがでます。 コントロール配列と呼ばれるものは、実際にはその名前に反して 配列ではありません。そのため、IsArray では判定できません。 「コントロール配列」ではなく「コントロールの配列」ならば 判定できますけれどね。 Dim c(1) As VB.Control Set c(0) = Label1 Set c(1) = Command1 Debug.Print IsArray(c) 'True コントロール配列というものは、実際にはコレクションの一種です。 コントロール配列にすると、Index プロパティが使われるという点の他、 御存知のようにイベントの管理単位やイベント引数も変わってきますし、 Debug.Print Label2.Count といった、コレクションならではのメソッドが追加されるきたりもします。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.