ワークシート上のコントロールを操作する
ワークシート上に作成したテキストボックスやコンボボックスなどのコントロールをVBAで操作するときは、ワークシートオブジェクトのOLEObjectsプロパティを使います。
OLEObjectsプロパティ
ワークシートオブジェクトのOLEObjectsプロパティは、ワークシート上に作成したテキストボックスやコンボボックスなどのコントロール(OLEオブジェクト)がコレクションで格納されているプロパティです。

 図1:OLEObjectsプロパティ(基本)
Worksheetオブジェクト.OLEObjects.プロパティやメソッド
プロパティやメソッド
 OLEObjectsを操作・設定するためのプロパティやメソッドを記述します。

コントロールを追加するときの指定値(参考)
 チェックボックス…Forms.CheckBox.1
 テキストボックス…Forms.TextBox.1
 コマンドボタン …Forms.CommandButton.1
 オプションボタン…Forms.OptionButton.1
 リストボックス …Forms.ListBox.1
 コンボボックス …Forms.ComboBox.1
 トグルボタン  …Forms.ToggleButton.1
 スクロールバー …Forms.ScrollBar.1
 ラベル     …Forms.Label.1
 イメージ    …Forms.Image.1

【記述例1】ワークシート上に作成したコントロール数を求めます
lngObjects = Worksheets("Sheet1").OLEObjects.Count

【記述例1】ワークシート上にオプションボタンを作成します
Worksheets("Sheet1").OLEObjects.Add "Forms.OptionButton.1"

 図2:コントロールを操作するとき
Worksheetオブジェクト.OLEObjects(コントロール).Object.プロパティやメソッド
コントロール
 操作するコントロールを名前や番号で指定します。なお、番号で指定するときの先頭は1です。
プロパティやメソッド
 ValueやEnabledなど、コントロールを操作するときのプロパティやメソッドを指定します。

【記述例1】「TextBox1」というテキストボックスへ値をセットする
Worksheets("Sheet1").OLEObjects("TextBox1").Object.Value = 8703

【記述例2】ワークシート上の3つ目のコントロールへ値をセットする
Worksheets("Sheet1").OLEObjects(3).Object.Value = 8703

【記述例3】「ComboBox1」というコンボボックスへアイテムを追加する
Worksheets("Sheet1").OLEObjects("ComboBox1").Object.AddItem "カブドットコム"
使用例1/テキストボックスへ値をセットする
OLEObjectsプロパティの使用例です。このサンプルでは、ワークシート上へ配置したテキストボックスへ値をセットしています。

また、For 〜 Nextの部分では、Code1、Code2、Code3のように名前が連続しているテキストボックスへ値をセットしています。

 リスト1:ワークシート上のコントロール(OLEObject)を操作する
Sub sSetValue()

    Dim i As Long

    'テキストボックスへ値をセット
    Worksheets("Sheet1").OLEObjects("TextBox1").Object.Value = 8703

    '連続した名前のテキストボックスへ値をセット
    For i = 1 To 3
        Worksheets("Sheet1").OLEObjects("Data" & i).Object.Value = i
    Next

End Sub
 ※これはエクセルマクロです。
使用例2/新しいコントロールを追加する
OLEObjectsプロパティの使用例その2です。このサンプルでは、ワークシート上へオプションボタンを10個追加しています。また、追加と同時にコントロール名と表示位置の設定も行っています。

 リスト2:ワークシート上へ新しいコントロール(OLEObject)を追加する
Sub sAdd_OLEObject()

    Dim objOLE As OLEObject
    Dim i      As Long

    '画面更新を一時的にOFF
    Application.ScreenUpdating = False

    For i = 1 To 10
        'コントロールを追加する
        Set objOLE = Worksheets("Sheet1") _
                     .OLEObjects.Add("Forms.OptionButton.1")
        objOLE.Name = "OPT0" & i   'コントロール名を設定(OPT01からの連番)
        objOLE.Left = 10           '横位置を設定
        objOLE.Top = (i * 20) + 10 '縦位置を設定
    Next

    '画面更新をONに戻す
    Application.ScreenUpdating = True

End Sub
 ※これはエクセルマクロです。
Copyright(C) 1999-2006 結城圭介。 All rights reserved