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

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)

```vb: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(名前)

```vb: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等で取得          |

## 文法(動的作成)

```vb: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        |

## 文法(動的作成)
通常のコンポーネントと同じです

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