TR>

ActiveXコントロール

わずかな知識で VBA!

ActiveX
コントロール


 ActiveXコントロール



  「ダイアログボックスを作ってみよう 1」で説明しましたが、

  ActiveXコントロールというのは、ダイアログボックスを構成する
  部品のことです。ユーザーフォームの上に配置して使用します。

  また、エクセルのワークシートに直接配置して使用するActiveXコントロールも
  用意されています。

  こちらはマクロの登録方法がVBEで行う方法とちょっと異なりますが、
  持っている機能は同じです。

  シートに配置するコントロールには、ActiveXコントロールとは別に
  フォームコントロールというものもあります。

  こちらは、Excel95から継承されているもので、
  基本的にイベントという考えがありません。  

  このページでは基本的にユーザーフォーム上に配置するActiveXコントロール
  を説明しますが、ページ最後でワークシートに直接配置して使用するものの
  取扱方法を説明します。


  フォームコントロールへのマクロの登録方法は「マクロの登録」で説明して
  います。
           マクロの登録
 


  さて、ユーザーフォームにどのようなActiveXコントロールを配置するかで、
  ダイアログボックスの使いやすさは決まってしまいます。

  そのためにも、Excel VBA ActiveXコントロールにどのようなものがあるのか
  などを、知っておく必要があります。

  そこで、それぞれのActiveXコントロールが持っている機能や、
  その使い方などを細かく説明したいと思います。


わずかな知識でVBA!




     

  ユーザーフォームツールバー

       

  VBEには、ユーザーフォームツールバーというツールバーが用意されています。

  VBEの画面に表示されていない場合は、

  ツールバーの「表示(V)」から、「ツールバー(T)」 ⇒ 「ユーザーフォームツールバー」にチェックをいれます。

   ただし、私はあまり使っていません。コントロールを選択後にマウスの右クリックで用が足ります。

  右クリックから表示されるメニューは、
  ユーザーフォームツールバーに表示されているもの+「▼」ボタンを押すことにより表示される分です。

  小さな「▼」ボタンを押すのが嫌いな方には右クリックをお勧めします。

  ツールバーの各ボタンの上にマウスを持っていけば、コントロールチップテキストというもので、その名称(働き?)
  が表示されますが、簡単に説明しておきます。

  注意:VBEのヘルプでは、コントロールのこともオブジェクトと呼ぶときがあります。
      下の説明のオブジェクトもコントロールのことです。

ユーザーフォームツールバーのボタンの意味
ボタン 名称? 用途 働き
最前面に移動 オブジェクトの
移動
選択したコントロールを、すべてのコントロールの最前面に移動
最背面に移動 選択したコントロールを、すべてのコントロールの最背面に移動
グループ化 オブジェクトの
グループ化
選択した複数のコントロールを1つのオブジェクトとしてまとめて扱えるようにします。
グループ解除 グループ化していた各コントロールを別々のオブジェクトとして独立させます。
整列 オブジェクトの
配置
選択したオブジェクトを指定の方法で整列させます。
フォーム中央に配置 選択したオブジェクトをフォームの中央に整列させます。
同じサイズに揃える オブジェクトの
サイズ調整
各コントロールの大きさを揃えます。
ズーム オブジェクトの
大きさ調整
フォーム上のコントロールの大きさが変化します。


  各コントロールが持っているイベントを調べる方法

    各コントロールは、そのコントロールが持っているイベントにたいして記述されたイベントプロシージャ
    のコードによって機能します。

    つまり、そのコントロールにイベントが発生した時に、自動的にコードが実行されるように作られています。

    作成時には、そのコントロールが持つイベントの中から、
    使用したいイベントを選択して、コードを記述しなければなりません。

    
    各コントロールをダブルクリックすると、一番よく使うイベントプロシージャが作成されますが、
    各コントロールが持っているイベントは1つではありません。

    これを調べるには、まず、目的のコントロールをダブルクリックします。
    コントロールによって、***.Click()か、***.Change()などの空のプロシージャが作成されます。
    その状態で、下の図のプロシージャボックスの「▼」ボタンをクリックすると、
    そのコントロールに用意されているイベントのサブメニューが表示され確認できます。


         
    

    たとえば、コマンドボタンだけでも、13のイベントが確認できますが、
    私が使用しているのは、「Click」イベントだけです。
    その他のイベントは必要性を感じたことがありません(笑)



ActiveXコントロール一覧
ボタン 名前 作成方法・使用例
ラベル
配置後に「Caption」プロパティーを修正
主に、他のコントロールの説明用
テキストボックス
ユーザーに文字や数値を入力してもらう
値は、「Valueプロパティ」で取得する
コンボボックス  
   リストを表示した状態

選択項目をドロップダウン形式で表示します。
リストの中から該当するものを選択してもらうだけでなく、
リストになければ新たに入力するためのテキストボックスが用意されている。

水平・垂直スクロールバーは自動表示

値は、「Valueプロパティ」で取得する
リストボックス
リストの中から該当するものを選択してもらうだけ。
新たに入力することはできない。

設定方法は、コンボボックスに同じ

水平・垂直スクロールバーは自動表示

値は、「Valueプロパティ」で取得する
オプションボタン
いくつか有る項目の中で、一つだけを選択する場合に用います。

 同じレベルにこのボタンを設置するとその中の一つしか選択できません

他のオプションボタンを選択するとチェックが外れます。

 そのため、同じユーザーフォームにオプションボタンを用いた複数の選択項目を、表示したい場合は、
一つの項目毎に、下記のフレームで囲います。

チェックされ選択されているかどうかは、Valueプロパティで取得します。
 チェックされるとプロパティ値が「True」になります。
もちろん、プロシージャからの設定も可能です。
チェックボックス
こちらは、オプションボタンと違い、同時にいくつでも選択可能です。
チェックを外すには、チェック済みのところを再びクリックして外します。

チェックされ選択されているかどうかは、オプションボタンと同じで、Valueプロパティで取得します。
 チェックされるとプロパティ値が「True」になります。
トグルボタン
スイッチ感覚のボタンで、クリックすると、へこんだ状態でTrue、もう一度クリックして出っ張った状態でFalseです。
フレーム
枠のことです。

この中に、ユーザーフォーム同様、各コントロールを配置できます。

主にグループ分けに使います。複数のオプションボタンが同じフォーム内で使用できます。

コマンドボタン
あらかじめプログラミングされたコードを実行するためのボタン。
ボタンには、その動作が分かるように表示します。

タブストリップ



異なる種別で、同じコントロールを使う時に使用します。

どのページを選択しても、表示されるコントロールは同じです。

選択されているページは、タブストリップの「Value」値で判断します。

「Value」値は、1ページ目が「0」、
2ページ目が「1」となります。

マルチページ




ページ毎に、まったく異なるコントロールが使用できます。

ページ毎に、同じシートで使用する
マクロを配置しておくときなどに便利
スクロールバー
普通のスクロールバーと同じ働き。

マウスでスクロールボックスが移動された場合、その移動量に応じた値をチェンジイベントで取得して、利用します。

  Private Sub ScrollBar1_Change()
    Dim kaku As Long
    kaku = ScrollBar1.Value
    Height = 240 * kaku / 100
    Width = 270 * kaku / 100
    Zoom = kaku
  End Sub

スピンボタン
クリックすると、スピン ボタン (SpinButton) コントロールの値が変更されます。

それを利用して別のコントロールに表示される値を変更するコードを記述します。

ある範囲内で値を変化させたり、一覧から項目を選択するほか、テキスト ボックスに表示された値を変更する場合にも使用できます。

別のTextBox(TB1)の値を変更させる例

  Private Sub SpinButton1_Change()
    TB1.Text = SpinButton1.Value
  End Sub


Maxプロパティに最大値、Minプロパティに最小値、SmallChangeにステップ値を設定して使用します。
レフエッディト
右端のボタンをクリックすると、ユーザーフォームが折りたたまれて、シート上のセル、又は、セル範囲のアドレスを取得することが選択できます。

また、RefEditがフォーカスを持っているときは、折りたたまずにそのまま選択することも可能です。

加えて、TextBoxとして使用することも可能です。

単独セルを指定した場合のRefEditの値 : Sheet1!$C$5

セル範囲を指定した場合のRefEditの値 : Sheet1!$C$5:$D$8

文字列等を入力した時のRefEditの値 : 入力値に同じ

取得したアドレスは、

  Dim strEd As String
     strEd = RefEdit1.Value
  Range("B5").Value = "=" & strEd

と、リンク貼付に利用したり、アドレスの文字を加工して使用したりします。
イメージ
bmp、jpg形式等の画像を貼り付けて使用します。

画像は、「Picture」プロパティで選択します。

イメージは、ユーザーフォームやコマンドボタンにも貼り付けられます。


  「Tab」キー

    ここでも、変わった使い方をします。
    ユーザーフォーム上でコントロールを順番に選択していきます。
    フォーム上で重ねて配置したコントロールを選択するときなどに便利です。

 
  【ツールボックス】ツールバーに、自作のコントロールを登録する。

    タブストリップやマルチページ等で、ページ数を毎回修正していくのは面倒です。
    そこで、よく使うカスタマイズしたそれらのコントロールをツールボックスに登録してしまいましょう!

    方法はいたって簡単!作成したコントロールを、ツールボックスにドラッグ&ドロップするだけです。

    いらなくなったら、マウスの右クリックから削除できます。
    ただし、ドラッグ&ドロップするだけだと、Excelを終了すると消えてしまいます。

    保存して、次回以降も使用したい場合は、【ツールボックス】ツールバーのタブをマウスで右クリックして、
    「新しいページ(N)」を選択してページを追加します。
    そのページにドラッグ&ドロップすれば次回以降も使用できます。

              
   
    そこで気づくのは、【ツールボックス】ツールバーは、コントロールのマルチページだったということです。
    ツールボックスの表示幅を変更することもできます。

              
  
    マルチページなので、表示の変更を行うには、必ずタブをクリックしてください。


  タブオーダー

    ユーザーフォーム上に配置した、各ActiveXコントローラーへの移行順序を設定する、
    タブオーダーについて説明します。

    エンターキーを押した時にフォーカスが移る順序をタブオーダーといいます。

      *フォーカス:コントロールがアクティブになっている状態のことを「フォーカス」と言います。

    タブオーダーを設定していない状態では、
    フォーカスはコントロールをユーザーフォームに配置した順番で移行していきます。

    そのままでも充分使えますが、先に入力すべきものが、後にフォーカスされたりしていては、
    見栄えや使い勝手が悪いものとなります。そのために、タブオーダーを設定しておく必要があります。

    方法は、非常に簡単で、ユーザーフォームを右クリックすると表示されるサブメニューの一番下に、
   「タブオーダー(A)」とあるので、これをクリックし、タブオーダーを設定するダイアログボックスを表示します。

              
 
 
    そのユーザーフォームに配置したコントロールの一覧がダイアログボックスに表示されているので、
    「上に移動」、又は、「下に移動」ボタンで移動させ、入力手順に従った順番を設定していきます。


ワークシートに張り付けるActiveXコントロール

 

    ワークシートにコントロールを配置するには、開発タグを選択し、上の図の「挿入」ボタンをクリックします。
    すると、上段にフォームコントロール、下段にActiveXコントロールが配置されたサブメニュが表示されます。

    下段のActiveXコントロールの中から挿入したいコントロールを選択(クリック)し、次に、配置したいセルを
    クリックしながらドラッグして好みの大きさにします。この時に「Alt」キーを押しながら行うとセルの大きさとなります。

    この作業を行うとExcelは自動的にデザインモードになり、図の「デザインモード」ボタンがオレンジ色になります。
    あとでコントロールを編集したい場合には、この「デザインモード」をクリックしてから行います。

    各コントロールは、デザインモードの時にコントロールを右クリックすると表示されるサブメニューから設定を行えます。
    マクロの登録は、そのサブメニューの中の「コードの表示」を選択すると自動的にそのコントロールが持つ
     標準的なイベントでプロシージャが作成されます。

 

    上の図はシート1にチェックボックスを作成し「コードの表示」を実行したときのものです。
    記述先も「Sheet1」になります。後はコードを記入すれば出来上がりです。

    イベントの変更方法も使用方法もユーザーフォームに配置した場合と同じです。
    では、最後にシート上にあるチェックボックスすべてのチェックをはずすマクロを書いておきます。

    初期設定時に戻す時などで、一つ一つ外していくのが面倒という方には役に立つと思います。
    こちらは標準モジュールに記述しても使用できます。

    For Each Nextステートメントを使用しています

      Sub chbkesi()
          Dim chb As OLEObject
          For Each chb In ActiveSheet.OLEObjects
            If TypeName(chb.Object) = "CheckBox" Then
              chb.Object.Value = False
            End If
          Next chb
       End Sub


   となります。

    たったこれだけのコードで百個でも千個でもワークシート上にあるチェックボックスすべてののチェックを外すことが

    できるのです。

    すごいと思った方は、ちょっとだけExcelのVBAを勉強すればこれぐらいのことはできるようになります!
        


  わずかな知識でVBA!       TOP

  マクロで何ができる?   ユーザーインターフェース    マクロの記録   マクロの登録
 
  イベントについて      マクロの編集           ゲームで覚えるVBAプログラミング
 
  オブジェクトの操作     セルの操作            MsgBox関数・InputBox関数
 
  変数の型           ヘルプの活用          イミディエイトウィンドウ  
 
  Withステートメント      Setステートメント
 
  条件分岐のステートメント   If Then Else,Select Case
 
  繰り返しのステートメント   Do Loop
 
  繰り返しのステートメント   For Next
  
  ダイアログボックスを作ってみよう1        ダイアログボックスを作ってみよう2 【実践編】
  
  ActiveXコントロール    各コントロールのプロパティ       文字列の操作        Endプロパティ

  リンク・検索   相互リンク    マイプロフィール       YouTubeの部屋 
   

Copyright (C) わずかな知識でVBA All Rights Reserved