本主旨包括了有關在工作表和圖表工作表上使用 ActiveX 控制項的特定資訊。 如需新增和使用控制項的一般資訊,請 參閱在檔上使用 ActiveX 控制項 建立自訂對話方塊

在工作表上使用控制項時,必須記住以下幾點:

  • 除了適用于 ActiveX 控制項的標準屬性之外,下列屬性也可以與 Microsoft Excel 中的 ActiveX 控制項搭配使用: BottomRightCell LinkedCell ListFillRange Placement PrintObject TopLeftCell ZOrder

    這些屬性可用 ActiveX 控制項的名稱來傳回或設定。 以下範例捲動活頁簿視窗,使 CommandButton1 位於視窗的左上角。

      Set t = Sheet1.CommandButton1.TopLeftCell
      With ActiveWindow
          .ScrollRow = t.Row
          .ScrollColumn = t.Column
      End With
    
  • 當 ActiveX 控制項處於啟動狀態時,會停用某些 Microsoft Excel Visual Basic 方法和屬性。 例如,當某一控制項啟動時,就無法使用 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
    
  • 當使用者按兩下滑鼠來編輯內嵌在其他應用程式之文件中的 Microsoft Excel 活頁簿時,該活頁簿上的控制項將無法正常運作。 如果使用者用右鍵按一下活頁簿,然後選取快顯功能表上的 [開啟] 命令來作業,活頁簿上的控制項即會正常運作。

  • 用 Microsoft Excel 5.0/95 活頁簿檔案格式儲存 Microsoft Excel 活頁簿時,將遺失 ActiveX 控制項資訊。

  • 在工作表上 ActiveX 控制項的事件處理程序中,Me 關鍵字參照的是工作表,而非控制項。

    用 Visual Basic 新增控制項

    在 Microsoft Excel 中,ActiveX 控制項是用 OLEObjects 集合中的 OLEObject 物件代表 (所有 OLEObject 物件也包含在 Shapes 集合中)。 如果要使用程式設計方式在工作表新增 ActiveX 控制項,可使用 OLEObjects 集合的 Add 方法。 下列範例在第一張工作表新增命令按鈕。

    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 集合的成員,所以也可使用該集合設定若干控制項的屬性。 下列範例會對齊第一張工作表上所有控制項的左邊緣。

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

    透過 Shapes 和 OLEObjects 集合使用控制項名稱

    ActiveX 控制項在工作表上有兩個名稱:一個是包含該控制項的圖案名稱,當檢視工作表時,您可以在 [名稱] 方塊中看到,另一個是控制項的程式碼名稱,您可以在 [屬性] 視窗中 (Name) 右邊的儲存格裡看到。 當您第一次新增一個控制項到工作表中時,該圖案名稱和程式碼名稱是相符合的。 不過,如果您變更了圖案名稱或程式碼名稱的其中一項,則另一項將不會自動變更。

    在控制項的事件程序中,使用的是控制項的程式碼名稱。 不過,當您從 ShapesOLEObjects 集合中傳回工作表的控制項時,必須使用圖案名稱,而不能使用程式碼名稱,以便根據名稱來參照控制項。 例如,假設您新增一個核取方塊到工作表中,而且預設圖案名稱和預設程式碼名稱都是 CheckBox1。 如果您在 [屬性] 視窗的 (Name) 旁邊輸入 chkFinished 來變更程式碼名稱,您必須在事件程序名稱中使用 chkFinished,但仍然必須使用 CheckBox1 以便從 ShapesOLEObject 集合傳回控制項,如下列範例所示。

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

    支援和意見反應

    有關於 Office VBA 或這份文件的問題或意見反應嗎? 如需取得支援服務並提供意見反應的相關指導,請參閱 Office VBA 支援與意見反應

  •