シートで ActiveX コントロールを使用する

このトピックでは、ワークシートとグラフ シートでの ActiveX コントロールの使用に関する具体的な情報について説明します。 コントロールの追加と操作の一般的な情報については、「 ドキュメントでの ActiveX コントロールの使用 」および 「カスタム ダイアログ ボックスの作成」を参照してください。

シートのコントロールを処理する場合は、次に示すことに注意してください。

  • ActiveX コントロールで使用できる標準プロパティに加えて、Microsoft Excel の ActiveX コントロールでは、 BottomRightCellLinkedCellListFillRangePlacementPrintObjectTopLeftCellZOrder の各プロパティを使用できます。

    これらのプロパティは、ActiveX コントロール名を使用して値の取得および設定ができます。 次の使用例は、CommandButton1 の位置がブック ウィンドウの左上隅になるようにブック ウィンドウをスクロールします。

      Set t = Sheet1.CommandButton1.TopLeftCell
      With ActiveWindow
          .ScrollRow = t.Row
          .ScrollColumn = t.Column
      End With
    
    
  • 一部の Microsoft Excel Visual Basic のメソッドとプロパティは、ActiveX コントロールがアクティブ化されると無効になります。 たとえば、コントロールがアクティブな場合は Sort メソッドを使用できないため、ボタンクリック イベント プロシージャでは次のコードが失敗します (ユーザーがコントロールをクリックした後もコントロールがアクティブであるため)。

      Private Sub CommandButton1.Click 
          Range("a1:a10").Sort Key1:=Range("a1") 
      End Sub 
    

    この問題を解決するには、失敗したプロパティまたはメソッドを使用する前に、シート上の他の要素をアクティブにします。 たとえば、範囲を並べ替えるコードは次のようになります。

      Private Sub CommandButton1.Click 
          Range("a1").Activate 
          Range("a1:a10").Sort Key1:=Range("a1") 
          CommandButton1.Activate 
      End Sub
    
  • 別のアプリケーションの文書に埋め込まれた Excel ブックのコントロールは、編集のためにそのブックをユーザーがダブルクリックしても機能しません。 このコントロールが機能するには、ユーザーがブックを右クリックしてショートカット メニューで [開く] をクリックします。

  • Excel 5.0、および Excel95 のブック形式を使用して、Excel ブックを保存すると、ActiveX コントロール情報は失われます。

  • シートの ActiveX コントロールのイベント プロシージャ内の Me キーワードは、コントロールではなく、シートを参照します。

Visual Basic でコントロールを追加する

Microsoft Excel では、ActiveX コントロールは OLEObjects コレクション内の OLEObject オブジェクトによって表されます (すべての OLEObject オブジェクトも Shapes コレクション内にあります)。 ActiveX コントロールをプログラムによってシートに追加するには、OLEObjects コレクションの Add メソッドを使用します。 次の例では、ワークシート 1 にコマンド ボタンを追加します。

Worksheets(1).OLEObjects.Add "Forms.CommandButton.1", _ 
    Left:=10, Top:=10, Height:=20, Width:=100

Visual Basic でコントロールのプロパティを使用する

Visual Basic コードでは、通常 ActiveX コントロールを名前で参照します。 次の使用例は、"CommandButton1" というコントロールのキャプションを変更します。

Sheet1.CommandButton1.Caption = "Run"

クラス モジュール以外のコントロールが含まれているシートで、コントロール名を使用する場合、使用するコントロール名にはシート名を付ける必要があります。

Visual Basic コードで使用するコントロール名を変更するには、そのコントロールを選択して表示されたプロパティ ウィンドウで Name プロパティを設定します。

ActiveX コントロールは、 OLEObjects コレクションの OLEObject オブジェクトでも表されるため、そのコレクションのオブジェクトを使用してコントロールのプロパティを設定できます。 次の使用例は、"CommandButton1" というコントロールの左端の位置を設定します。

Worksheets(1).OLEObjects("CommandButton1").Left = 10

OLEObject オブジェクトのプロパティとして表されない、コントロールのプロパティは Object プロパティを使用して実際のコントロール オブジェクトを取得して設定することができます。 次の使用例は、"CommandButton1" というコントロールのキャプションを変更します。

Worksheets(1).OLEObjects("CommandButton1"). _ 
    Object.Caption = "run me"

すべての OLE オブジェクトは Shapes コレクションのメンバーでもあるため、このコレクションを使用して、いくつかのコントロールにプロパティを設定できます。 次の使用例は、ワークシート 1 のすべてのコントロールの左端の位置を設定して揃えます。

For Each s In Worksheets(1).Shapes 
    If s.Type = msoOLEControlObject Then s.Left = 10 
Next

コレクションおよび OLEObjects コレクションでコントロール名を使う

シートの ActiveX コントロールには、シートを表示するときに [名前] ボックスに表示できるコントロールを含む図形の名前と、コントロールのコード名の 2 つの名前があります。この名前は、プロパティ ウィンドウの [名前] の右側にあるセルに表示されます。 最初にコントロールをシートに追加すると、図形名とコード名が一致します。 ただし、図形名またはコード名を変更した場合、もう一方は自動的に一致するように変更されません。

コントロールのイベント プロシージャの場合は、コントロールのコード名を使用します。 Shapes または OLEObjects コレクションからコントロールを取得する場合は、コード名ではなく、図形の名前を使用してコントロールを指定します。 たとえば、コード名および図形の名前が既定の CheckBox1 というチェック ボックスを追加したと仮定します。 If you then change the control code name by typing chkFinished next to (Name) in the Properties window, you must use chkFinished in event procedure names, but you still have to use CheckBox1 to return the control from the Shapes or OLEObject collection, as shown in the following example.

Private Sub chkFinished_Click() 
    ActiveSheet.OLEObjects("CheckBox1").Object.Value = 1 
End Sub

サポートとフィードバック

Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。