LoginSignup
0
1

More than 3 years have passed since last update.

VBA 拡張コンポーネント動的作成(備忘録)

Last updated at Posted at 2021-02-14

VBAでよく利用する、拡張コンポーネント。
主にディクショナリ、ファイルシステム、DTPicker等を使う備忘録です。

筆者はBASICからプログラミングに入りましたが、C系の言語が長かったため、本文ではCall文を使用しております。
Call文を利用しない形式でも利用できます。

登録情報の格納場所

各コンポーネントはレジストリに登録されています。
コンピューター\HKEY_CLASSES_ROOT\
例:DTPicker
コンピューター\HKEY_CLASSES_ROOT\MSComCtl2.DTPicker

VBA関連

一覧

コンポーネント名 クラス名 コンポーネントID
ラベル MSForms.Label Forms.Label.1
テキストボックス MSForms.TextBox Forms.TextBox.1
コンボ ボックス MSForms.ComboBox Forms.ComboBox.1
リスト ボックス MSForms.ListBox Forms.ListBox.1
チェックボックス MSForms.CheckBox Forms.CheckBox.1
オプションボタン MSForms.OptionButton Forms.OptionButton.1
トグルボタン MSForms.ToggleButton Forms.ToggleButton.1
フレーム MSForms.Frame Forms.Frame.1
コマンド ボタン MSForms.CommandButton Forms.CommandButton.1
タブ ストリップ MSForms.TabStrip Forms.TabStrip.1
マルチページ MSForms.MultiPage Forms.MultiPage.1
スクロールバー MSForms.ScrollBar Forms.ScrollBar.1
スピン ボタン MSForms.SpinButton Forms.SpinButton.1
イメージ MSForms.Image Forms.Image.1

文法(動的作成)

オブジェクトは、UserForm,Frame,MultiPageなどコンポーネントを配置できるもの

変数に代入する場合

' 生成
set 変数 = オブジェクト.Controls.Add(コンポーネントID)
' 利用
変数.プロパティ...
' 解放
オブジェクト.Controls.Remove(変数.Name)

LabelSample1.bas
Dim labelSample As MSForms.Label

Private Sub UserForm_Initialize()
    Set labelSample = Me.Controls.Add("Forms.Label.1")
    labelSample.Caption = "ラベルサンプル"
End Sub

Private Sub UserForm_Terminate()
    Call Me.Controls.Remove(labelSample.Name)
End Sub

オブジェクトで管理する場合

' 生成
Call オブジェクト.Controls.Add(コンポーネントID,名前)
' 利用
オブジェクト.Controls(名前).プロパティ...
' 解放
Call オブジェクト.Controls.Remove(名前)

LabelSample2.bas

Private Sub UserForm_Initialize()
    Call Me.Controls.Add("Forms.Label.1", "CreatedLabel")
    Me.Controls("CreatedLabel").Caption = "ラベルサンプル"
End Sub

Private Sub UserForm_Terminate()
    Call Me.Controls.Remove("CreatedLabel")
End Sub

VBScript関連

VBScript(?)に実装されている機能

一覧

クラス名 コンポーネントID 備考
Dictionary Scripting.Dictionary
Drive Scripting.FileSystemObject GetDrive等で取得
File Scripting.FileSystemObject FilesからのForEach等で取得
FileSystem Scripting.FileSystemObject ファイル関係の基幹
Folder Scripting.FileSystemObject GetFolder等で取得

文法(動的作成)

DictionarySample.bas
Private myDict As Object

Private Sub UserForm_Initialize()
    Set myDict = CreateObject("Scripting.Dictionary")
    Call myDict.Add(1, "Data1")
End Sub

Private Sub UserForm_Terminate()
    Set myDict = Nothing
End Sub

VB6関連

入手先

VB6コンポーネントは、通常のOfficeインストール時には登録されていません。
別途入手・インストールする必要があります。
筆者は以下を利用しました。他にもVectorなどで他のソフトウェアもありますので、ご自由に使ってください。
「Visual Basic 6.0 Service Pack 6 Runtime Set Version.1.35(作:Tohさん、v6s6r135.zip)」

一覧

コンポーネント名 クラス名 コンポーネントID
動画再生(だったと思う) MSComCtl2.Animation MSComCtl2.Animation.2
コンボボックス型カレンダー MSComCtl2.DTPicker MSComCtl2.DTPicker.2
スクロールバー MSComCtl2.FlatScrollBar MSComCtl2.FlatScrollBar.2
カレンダー MSComCtl2.MonthView MSComCtl2.MonthView.2
上下ボタン MSComCtl2.UpDown MSComCtl2.UpDown.2

文法(動的作成)

通常のコンポーネントと同じです

他にも、多数のクラスが登録されていると思いますが、そちらは適宜追加したいと思います。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1