Excel VBA ActiveXコントロール(ボタン、テキストなど)の操作【Office2013以降】|Access VBAとの違いとは

公開日:2017年5月14日

ExcelやAccessでVBAツールを作成する場合には、ボタンやテキストボックスなど、コントロールをシートやフォーム上に設置することが多いと思います。コントロールをツール上に作成することで、シートやフォーム操作を分かりやすくすることで、ツールのユーザビリティを向上させることができるからです。

VBAでコントロールを操作する場合ですが、ExcelとAccessで異なります。特にExcelでは、コントロールの設定について、フォームコントロールとActiveXコントロールの2つがあります。今回はActiveXコントロールの操作に関して記載しています。

0.コントロール操作の前提

今回は次のようなコントロール操作を想定します。

・ボタンをクリックすると、ラベル、テキストボックス、ボタンにそれぞれ文字が表示される。
・ExcelコントロールはActiveXコントロールを使用する。
・コントロールの名前はボタン:btn1、ラベル:lbl1、テキストボックス:txt1とする。

Access フォーム

Access VBA コントロール操作

Excel シート

Excel VBA コントロール操作

1.Access VBAによるコントロール操作

フォームのVBE上に、btn1のクリックイベントプロシージャを次の通り入力します。

Private Sub btn1_Click()

Me.txt1.Value = "テキスト"
Me.lbl1.Caption = "ラベル"
Me.btn1.Caption = "ボタン"

End Sub

テキストボックスの値を入力するには、TextBox.Valueプロパティ、ラベルの表示にLabel.Captionプロパティ、ボタンの表示にCommandButton.Caption プロパティをそれぞれ使用しています。

また今回は、アクティブフォーム上のコントロール操作であるため、Meを使用しています。Meの代わりにForms("フォーム名")などのFormオブジェクトを使用しても構いません。フォーム名が「フォーム1」である場合には次の通り入力します。

Private Sub btn1_Click()

Forms("フォーム1").txt1.Value = "テキスト"
Forms("フォーム1").lbl1.Caption = "ラベル"
Forms("フォーム1").btn1.Caption = "ボタン"

End Sub

2.Excel VBAによるコントロール操作

2-1.Access VBAと同様の方法による操作

シートのVBE上に、btn1のクリックイベントプロシージャを次の通り入力します。

Private Sub btn1_Click()

ActiveSheet.lbl1.Caption = "ラベル"
ActiveSheet.txt1.Value = "テキスト"
ActiveSheet.btn1.Caption = "ボタン"

End Sub

Accessではフォーム上にコントロールを設置しているので、「Forms("フォーム1")」とフォームを表すオブジェクトを使用しました。

これに対してExcelでは、コントロールを設置しているのはシートです。従って「ActiveSheet」など、そのシートを表すオブジェクト及びプロパティを使用します。

またExcelの場合にもMeを使用することができます。

Private Sub btn1_Click()

Me.txt1.Value = "テキスト"
Me.lbl1.Caption = "ラベル"
Me.btn1.Caption = "ボタン"

End Sub

2-2.ActiveXコントロール固有の方法による操作

ExcelでActiveXコントロールを使用した場合には、「OLEObjectクラス」を使用した方法による操作も可能です。

OLEObjectクラスを使用してコントロールの値を設定するには、
OLEObjects("コントロール名").Object
というように、Worksheet.OLEObjects メソッドとOLEObject.Object プロパティを使用します。

今回のケースでは次の通りになります。

Private Sub btn1_Click()

ActiveSheet.OLEObjects("lbl1").Object.Caption = "ラベル"
ActiveSheet.OLEObjects("txt1").Object.Value = "テキスト"
ActiveSheet.OLEObjects("btn1").Object.Caption = "ボタン"

End Sub

VBAの文法上、OLEObjectクラスや、その上位(コレクション)に該当するOLEObjectsクラスにはたくさんのメソッドやプロパティが設定されています。今回のケースのような簡単な値の取得だけでなく、その他のプロパティの設定や、コントロールの追加削除、位置の指定など、ActiveXコントロールに関する様々な操作を行うことができます。