我想在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. 在集合中刪除對象數組中的對象mongo db
- 4. 對象到數組集合
- 5. 在VBA中合併多維數組excel
- 6. 集合中的對象數組
- 7. VBA Excel中的組合框
- 8. 在VBA中組合詞對象
- 9. 未添加到對象集合的Excel VBA工作簿
- 10. 如何準備集合對象在VBA
- 11. 確定集合或數組中對象的類型
- 12. 在vba中傳遞對象的集合作爲參數
- 13. 對象集合中的對象的訪問標識(VBA)
- 14. 數據綁定的集合或對象
- 15. Excel VBA集合保持重複最後一個對象
- 16. 麻煩與對象數組在VBA Excel 2010中
- 17. 將VBA對象數據覆蓋在集合中
- 18. 和/或VBA中的組合
- 19. 數組對象的訂購集合
- 20. VBA Excel Chart系列集合
- 21. 將兩組對象合併到VBA中
- 22. 在VBA中組合數組
- 23. Excel VBA集合函數錯誤
- 24. 在Excel中創建組合VBA
- 25. 在excel VBA中賦值給組合框
- 26. vba錯誤424與對象集合
- 27. VBA自定義集合對象
- 28. excel vba中的數組
- 29. Excel中數組的SUMIF VBA
- 30. 比較含集合數組對象