第28回 VBA会 登壇者 Takushi
VBAの悩みはVBAerに聞け
開催日時:2021年12月3日 20時~
登壇者 :Takushi@VBAとGAS勉強中
テーマ :CollectionとErrオブジェクト
今回はノンプロ研所属のTakushiさん。
VBAでは中上級者が使うCollectionクラスとErrオブジェクトに関する講談でーす。
(youtubeと一人車中泊旅行が趣味とな・・・。)
(ノンプロ件中級講座の講師か・・なんかすごそう。)
第4回Excelライブラリで魂が抜けた経験あり。
(だから受講者目線で「スッキリする講義を」ってモチベなのね(`・ω・´)b)
(これでワンステップ追加、全7回をスムーズに理解できるように)
OKは貰えたものの期限もないので進まない・・。
ということでVBA会登壇で自分を追い込んだ!
(つまり踏み台かww)
(真っ当な目標です!)
一気に作った資料で時間がどんくらいかかるかわからないですが・・
(講義の練習でもあるのか。よきよき(^^)
(こっから本番)
(まずは参照設定の概要説明。)
(続いてオブジェクトブラウザーの確認)
(オブジェクトブラウザーでVBAを選択するとさっきのリストになる)
(「ほぼ全てがグローバルメンバー」なのか・・・
例外は、CollectionとErrオブジェクトだけとな・・・。ほほぉぉ)
例えば、Left関数はStringsのメンバーであると共に、グローバルのメンバーでもあるので、Leftと記述するだけで使える。
(なるほど・・深く考えたことなかったわ)
例えばDateやyearも同じ。
グローバルで定義されたSubプロシージャーは「ステートメント」と呼ばれます。例えばKillステートメントとか。
(定数はConstで宣言。省略するとPrivateになる)
ここからサンプル作成
ユーザ定義の定数もオブジェクトブラウザで確認可能。
「VBAProject」で表示される。
Public Constはグローバルレベル。つまりプロジェクト内の全モジュールから利用できる。
(グローバルとPublicってそういうことね)
(つづいて列挙型=Enum)
(Enum教徒 発見!)
(Enumも同様にPublicはグローバル)
Enumメンバーは、別枠で表示される。
Enumは数値記載を省略すると直前数値から1足した値になる。
つずいてCollection(綴りまちがってます(^^;
(インデックスとキーを両方持っている構造・・・)
(なるほど・・・)
(クラス、インスタンスとは・・・を熱く語る時間)
オブジェクトブラウザで見るとこんな感じ。
(コードはコピッペ)
Collectionはインデックスでもキーでも要素を抽出できる。
「既定のメンバー」とは、省略した場合に使われるメンバー。宝石マーク。
(おっ!オブジェクトを格納するのか・・。難易度上がったぞ(`・ω・´)b)
(コードはコピッペ)
(コードはコピッペ)
(もうちょっと高度なサンプル)
myCollectionには、p As Pesernオブジェクトが格納される。
加えて、Enumも活用。
さらに高度なコードへ
(コードはコピッペ)
Initializeがあるから、宣言するだけでデータ読み込み完了しておる(`・ω・´)b
(コードはコピッペ)
(Personsクラスにコピッペ)
(コードはコピッペ)
Personsクラスの.Itemは、中身がCollection.ItemなのでインデックスでもキーでもOK。
Itemの戻り値はPersonクラスのため、インテリセンスも有効。
つづいて・・・
(なに?デフォルトプロパティ化するだと!?)
(へぇへぇへぇへぇへぇへぇへぇへぇへぇへぇへぇへぇへぇへぇへぇへぇ)
(すげぇぇぇ。宝石マークになってるぅぅぅ)
(うごく!こいつ動くぞ!)
(ここでコーヒーブレイク)
つづいてErrオブジェクト
(ふむふむ)
これは構文間違いなのでコンパイルエラー。
(組み込みオブジェクト・・・Newでインスタンス化する必要無し)
Numberプロパティが既定メンバー。
ErrオブジェクトはInformationモジュールのメンバー
(ほんとだ。既定メンバーだね(`・ω・´)b)
(コードはコピッペ)
ついでにエラー処理の追加説明。
これがあると、実行時エラーが発生しても無視して次の行を実行する。
これを利用してExistsと同様の動作をするExists2を作る。
(On Error GoTo 0で再び実行時エラーが発生するようになる)
(こいつ、動くぞ!)
(ここで時間切れ)