我想在Excel中有一個調用一個事件處理程序的對象數組。具體來說,我有多個按鈕,它們對不同的單元格執行相同的功能,爲了避免重複代碼,我希望通過索引(像我以前在VB 6.0中做的那樣)簡單地引用這些按鈕對象....通過查找哪個按鈕被點擊我想填充特定的單元格等,所以問題是:在Excel VBA按鈕數組?我在VB.net中做了一些工作,我在那裏使用了集合,並且運行得很好......但是看起來我不能在VBA中這樣做。在VBA中的對象數組或集合Excel
9
A
回答
1
將公共代碼分隔成單個方法並傳遞單元格作爲參數。爲每個按鈕分配它自己的事件方法,然後調用與特定單元格共同的方法作爲參數進行編輯。類似這樣的:
Private Sub CommonMethod(someCell as String)
' Do your stuff
Range(someCell).Value = something
End Sub
因此,每個按鈕可以分配給它自己的方法。這已經內置,所以不要試圖重新創建它,保持簡單。
Private Sub Button1_Click()
CommonMethod("A1");
End Sub
Private Sub Button2_Click()
CommonMethod("A2");
End Sub
3
VBA中沒有像VB中那樣的控件數組。對於某些控件,您可以創建一個自定義類來處理事件。例如,假設你有一個帶兩個命令按鈕的用戶窗體。在用戶窗體模塊,把這段代碼
Private mcolEventButtons As Collection
Private Sub UserForm_Initialize()
Dim clsEventButton As CEventButton
Set mcolEventButtons = New Collection
Set clsEventButton = New CEventButton
Set clsEventButton.EventButton = Me.CommandButton1
clsEventButton.RangeAddress = "A1"
mcolEventButtons.Add clsEventButton, Me.CommandButton1.Name
Set clsEventButton = New CEventButton
Set clsEventButton.EventButton = Me.CommandButton2
clsEventButton.RangeAddress = "A10"
mcolEventButtons.Add clsEventButton, Me.CommandButton2.Name
End Sub
然後創建一個名爲CEventButton自定義類模塊,並把這個代碼
Private WithEvents mctlEventButton As MSForms.CommandButton
Private msRangeAddress As String
Public Property Set EventButton(ctlButton As MSForms.CommandButton)
Set mctlEventButton = ctlButton
End Property
Public Property Get EventButton() As MSForms.CommandButton
Set EventButton = mctlEventButton
End Property
Private Sub mctlEventButton_Click()
Sheet1.Range(Me.RangeAddress).Value = "Something"
End Sub
Public Property Get RangeAddress() As String
RangeAddress = msRangeAddress
End Property
Public Property Let RangeAddress(ByVal sRangeAddress As String)
msRangeAddress = sRangeAddress
End Property
可變尺寸民調WithEvents關鍵字的命令按鈕的事件和火災,就好像它被綁定到特定的控件和用戶窗體模塊中。
以下是您所做的:只要用戶表單處於活動狀態,就創建了一個Collection來保存自定義類的實例。這確保這些實例保持在範圍內。然後,您創建了該類的新實例,爲其指定了一個特定的按鈕,並將其保存在集合中。你爲下一個按鈕做了同樣的事情。在這個例子中只有兩個按鈕,但是如果你有更多的按鈕,你可以繼續這樣做,直到內存不足。
我在自定義類模塊中創建一個RangeAddress屬性作爲示例。你需要存儲什麼信息取決於你最終想要完成什麼。
對於這個例子的工作,你需要將用戶窗體的ShowModal屬性設置爲FALSE,必須命名爲CommandButton1和CommandButton2的命令按鈕,具有代碼名爲Sheet1的工作表,以及其他可能的東西。
相關問題
- 1. 解析JSON對象數組在Excel VBA
- 2. 創建對象集合,然後在Excel VBA集合中查找匹配
- 3. 對象到數組集合
- 4. 在VBA中合併多維數組excel
- 5. 在VBA中組合詞對象
- 6. 未添加到對象集合的Excel VBA工作簿
- 7. 如何準備集合對象在VBA
- 8. 在vba中傳遞對象的集合作爲參數
- 9. 數據綁定的集合或對象
- 10. 麻煩與對象數組在VBA Excel 2010中
- 11. 數組對象的訂購集合
- 12. 和/或VBA中的組合
- 13. 在VBA中組合數組
- 14. VBA自定義集合對象
- 15. Excel中數組的SUMIF VBA
- 16. 將動態生成的對象放置在數組(或集合)中?
- 17. 如何在javascript中聲明json對象或可變大小的數組集合
- 18. Excel VBA數組
- 19. 可以將對象數組視爲Java中的對象集合嗎?收集
- 20. 需要的對象:VBA Excel
- 21. 錯誤在VBA中創建Excel對象
- 22. Excel中的組合算法VBA
- 23. 在java中對收集數組列表對象的集合進行排序
- 24. 對VBA中的對象集合進行排序
- 25. Excel VBA組合框標識
- 26. 如何對集合MongoDB中的對象數組進行排序?
- 27. 如何在Excel vba中創建每個成對組合
- 28. Java8中的「Autocloseable」的數組或集合
- 29. Javascript中有序集合的無序集合和數組的對象?
- 30. 在Excel VBA宏中的數組