2010-08-23 157 views
2

我正在使用數據庫values.Now填充我的電子表格如果我30行被填充然後我想創建一個動態按鈕說31或32行做一些動作。將填充的行不是固定的。我可以如何做到這一點。如何在excel中創建一個動態按鈕

+0

「填充......與數據庫值」是什麼意思?您是通過用戶輸入還是通過VBA代碼填充? – MikeD 2010-08-23 16:32:55

+0

通過VBA.Sorry,如果我聽錯了行話。我通過VBA進行數據庫連接,然後執行Select命令以獲取電子表格中的數據。 – gizgok 2010-08-23 18:12:01

回答

4

我假設你會在查詢填滿你的表格後搜索一個條件和「做什麼」之後遍歷記錄。因此,我asume要在其中放置該按鈕的位置由範圍()對象ActiveSheet()

因此,讓我們在那個位置創建一個動態的ActiveX按鈕中表示:

Sub CreateDynamicButton() 
Dim MyR As Range, MyB As OLEObject 
Dim MyR_T As Long, MyR_L As Long 


    Set MyR = Range("C110") 'just an example - you get that from your own script 
    MyR_T = MyR.Top   'capture positions 
    MyR_L = MyR.Left  '... 
    'create button 
    Set MyB = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False, DisplayAsIcon:=False) 

    'set main button properties 
    With MyB 
     .Name = "MyPrecodedButton"  'important - code must exist ... see below 
     .Object.Caption = "MyCaption" 
     .Top = MyR_T 
     .Left = MyR_L 
     .Width = 50 
     .Height = 18 
     .Placement = xlMoveAndSize 
     .PrintObject = True   'or false as per your taste 
    End With 

End Sub 

如果 - 提前 - 已創建的活性片

Private Sub MyPrecodedButton_Click() 
    MsgBox "Co-Cooo!" 
End Sub 

內以下例程然後一旦按上面創建的按鈕(下XP/SP2 + Excel 2003中測試)將出現一個很好的消息框。

創建例程不會詢問是否存在相同名稱的按鈕,您需要採取措施僅使用相同名稱創建一次。如果您調用例程兩次,則.Name = "..."將自動失敗並開始命名按鈕「CommandButton1」。

所以你應該現在有所有的材料來創建你的按鈕。如果他們需要採取不同的行動,他們每個人都需要預先編制程序。我應該提到你不能在OLE對象合併之後調試(逐步執行)Create例程,因爲控制權是在Excel之外傳輸的 - 「這不是錯誤,而是一個特性!」

我必須承認對我來說聽起來有點不同尋常,我可能不希望安裝動態按鈕作用於預先編碼的Sub,而是在查詢通過複選框給出選項之前執行初始對話框,例如「截斷後X行(是/否)「等 - 但你會有很好的理由按照你的方式。

希望有所幫助 - 祝你好運

+0

我已經填充我的電子表格後,我選擇一個單元格,所以當我選擇單元格時,我應該得到一個按鈕來更新我的更改。我會嘗試你的代碼片段,並知道你知道。謝謝努力 – gizgok 2010-08-25 12:37:27

+0

獲取錯誤運行時錯誤1004不能插入對象 – gizgok 2010-08-25 16:12:33

+0

您是否已經創建了VBA對「Microsoft Office Forms 2.0對象庫」或等效對象(工具/引用)的引用...此庫位於.../System32/FM20.DLL中 – MikeD 2010-08-26 09:16:31