tôi muốn có một mảng đối tượng trong excel gọi một trình xử lý sự kiện. Cụ thể là tôi có nhiều nút thực hiện chức năng tương tự cho các ô khác nhau và giữ mã trùng lặp Tôi chỉ muốn tham khảo các đối tượng nút này qua chỉ mục (như tôi đã từng làm trong VB 6.0) .... bằng cách tìm nút nào đã được nhấp vào Tôi muốn cư các tế bào cụ thể vv vì vậy câu hỏi là: một loạt các nút trong VBA excel? Tôi đã làm một công việc nhỏ trong VB.net, nơi tôi đã sử dụng các bộ sưu tập, và nó hoạt động tốt ... nhưng có vẻ như tôi không thể làm điều đó trong VBA.mảng hoặc bộ sưu tập đối tượng trong VBA Excel
Trả lời
Tách mã chung thành một phương thức và chuyển ô làm tham số. Chỉ định mỗi nút là phương thức sự kiện riêng của nó, lần lượt gọi phương thức chung với ô cụ thể để chỉnh sửa dưới dạng tham số. Một cái gì đó như thế này:
Private Sub CommonMethod(someCell as String)
' Do your stuff
Range(someCell).Value = something
End Sub
Vì vậy, mỗi nút có thể được gán cho phương pháp riêng của nó. Điều này đã được xây dựng nên không cố gắng tạo lại nó, giữ nó đơn giản.
Private Sub Button1_Click()
CommonMethod("A1");
End Sub
Private Sub Button2_Click()
CommonMethod("A2");
End Sub
Không có mảng điều khiển nào trong VBA như trong VB. Đối với các điều khiển nhất định, bạn có thể tạo một lớp tùy chỉnh để xử lý các sự kiện. Ví dụ, giả sử bạn có một userform với hai nút lệnh. Trong mô-đun userform, đặt mã này
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
Sau đó tạo một mô-đun lớp tùy chỉnh tên CEventButton và đặt mã này
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
Từ khóa WithEvents trong các cuộc thăm dò đo kích thước biến sự kiện và cháy của CommandButton cũng giống như khi nó được gắn với một điều khiển cụ thể và trong mô-đun userform.
Đây là những gì bạn đã làm: Bạn đã tạo một Bộ sưu tập để giữ các phiên bản của lớp tùy chỉnh của bạn miễn là biểu mẫu người dùng đang hoạt động. Điều này đảm bảo rằng những trường hợp đó nằm trong phạm vi. Sau đó, bạn tạo một thể hiện mới của lớp, gán một nút cụ thể cho nó và lưu nó vào bộ sưu tập. Bạn đã làm tương tự cho nút tiếp theo. Trong ví dụ này chỉ có hai nút, nhưng nếu bạn có nhiều hơn, bạn có thể tiếp tục làm điều này cho đến khi bạn hết bộ nhớ.
Tôi tạo thuộc tính RangeAddress trong mô-đun lớp tùy chỉnh làm ví dụ. Những thông tin bạn cần để lưu trữ sẽ phụ thuộc vào những gì bạn đang cố gắng hoàn thành. Để ví dụ này hoạt động, bạn cần đặt thuộc tính ShowModal của biểu mẫu người dùng thành FALSE, phải có các nút lệnh có tên CommandButton1 và CommandButton2, có một trang tính có tên mã là Sheet1 và có thể một số nội dung khác.
- 1. Cách viết bộ sưu tập VBA vào trang tính Excel
- 2. Phân tích một mảng đối tượng JSON trong Excel VBA
- 3. Tại sao sử dụng mảng trong VBA khi có bộ sưu tập?
- 4. REST - Xóa bộ sưu tập đối tượng
- 5. tải tập tin đồng bộ từ bên trong VBA (Excel)
- 6. Có thể định nghĩa một mảng các cấu trúc hoặc các đối tượng trong VBA không?
- 7. Đối tượng Dereferencing trong một mảng cho Bộ sưu tập rác Java
- 8. Bộ sưu tập tuyển tập có mảng
- 9. Sử dụng Đối tượng Từ điển trong Excel VBA
- 10. Chức năng mảng trong Excel VBA
- 11. Không thể điền VBA Bộ sưu tập với các đối tượng tùy chỉnh bằng cách sử dụng Collection.add
- 12. ArrayList so với một mảng đối tượng so với Bộ sưu tập của T
- 13. Lọc các mảng 2D trong Excel VBA
- 14. Bộ sưu tập rác đối tượng Ruby Class
- 15. C bộ sưu tập # rác với đối tượng tham chiếu
- 16. Bộ sưu tập NHibernate và các đối tượng chuyển động
- 17. Bộ sưu tập tiêu chuẩn cho các đối tượng IDisposable
- 18. Thực hiện IXmlSerializable trên một đối tượng bộ sưu tập
- 19. Bộ sưu tập bản đồ của các đối tượng
- 20. Sắp xếp một bộ sưu tập của các đối tượng
- 21. Java - Tạo một bộ sưu tập đối tượng thân thiện
- 22. Bộ sưu tập/Mảng chứa phương pháp
- 23. LINQ: Tìm kiếm một bộ sưu tập trong một bộ sưu tập cho một đối tượng duy nhất
- 24. Bộ sưu tập MongoDB có thể có bên trong bộ sưu tập khác không?
- 25. Các đối tượng liên kết trong bộ sưu tập Tập hợp
- 26. Trình tạo đối tượng Excel VBA và hàm hủy
- 27. VBA Excel: Biên dịch Lỗi: Đối tượng được yêu cầu?
- 28. Excel VBA tham chiếu đến đối tượng QueryTable theo tên
- 29. WPF Databinding Với đối tượng sưu tập
- 30. array_map trên bộ sưu tập có giao diện mảng?