Excel VBA ActiveXコントロール(ボタン、テキストなど)の操作【Office2013以降】|Access VBAとの違いとは
公開日:2017年5月14日
ExcelやAccessでVBAツールを作成する場合には、ボタンやテキストボックスなど、コントロールをシートやフォーム上に設置することが多いと思います。コントロールをツール上に作成することで、シートやフォーム操作を分かりやすくすることで、ツールのユーザビリティを向上させることができるからです。
VBAでコントロールを操作する場合ですが、ExcelとAccessで異なります。特にExcelでは、コントロールの設定について、フォームコントロールとActiveXコントロールの2つがあります。今回はActiveXコントロールの操作に関して記載しています。
【Office2013以降】Excel VBAとAccess VBA|(ActiveX)コントロール操作の方法
目次
0.コントロール操作の前提
今回は次のようなコントロール操作を想定します。
・ボタンをクリックすると、ラベル、テキストボックス、ボタンにそれぞれ文字が表示される。
・ExcelコントロールはActiveXコントロールを使用する。
・コントロールの名前はボタン:btn1、ラベル:lbl1、テキストボックス:txt1とする。
Access フォーム
Excel シート
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コントロールに関する様々な操作を行うことができます。
10冊まで同時に読み放題の電子書籍サービス(200万冊以上が対象)。
PC・ITカテゴリーの対象数は7,000以上。
スキル、ノウハウ吸収や話題作りにと、ライフ・クオリティを高めてくれます。
関連記事
書籍には載っていないことにも言及してコメント
RPAとVBAの比較や今度のトレンドもコメント
他のプログラミング言語との違いや日本情勢にも言及して解説
様々な視点でVBAの難易度をコメント