2009-02-19 28 views

Trả lời

14

Đoạn mã dưới đây trình bày cách bạn có thể tự động cư một khung trong một userform với các điều khiển ...

Trong hình thức tôi sử dụng tôi đã có một kiểm soát khung tên Frame1, vì vậy trong UserForm_Initialize bạn gọi Frame1.Controls. Thêm để nhúng điều khiển trong khung. Bạn có thể đặt điều khiển được trả lại cho biến điều khiển WithEvents mà bạn đã xác định trong mô-đun mã UserForm để bạn có thể trả lời các sự kiện trên bất kỳ điều khiển nào bạn muốn ...

Vì vậy, với phương pháp này bạn cần phải viết trước bất kỳ mã sự kiện nào bạn muốn cho bất kỳ điều khiển nào bạn tạo ...

Cũng lưu ý rằng bạn có thể định vị và điều chỉnh các điều khiển ngay cả khi thuộc tính trên cùng, bên trái, chiều rộng và chiều cao không nhất thiết xuất hiện trong intellisense ...

Private WithEvents Cmd As MSForms.CommandButton 
Private WithEvents Lbl As MSForms.Label 

Private Sub UserForm_Initialize() 
    Set Lbl = Frame1.Controls.Add("Forms.Label.1", "lbl1") 
    Lbl.Caption = "Foo" 
    Set Cmd = Frame1.Controls.Add("Forms.CommandButton.1", "cmd1") 
End Sub 

Private Sub Cmd_Click() 
    Cmd.Top = Cmd.Top + 5 
End Sub 

Private Sub Lbl_Click() 
    Lbl.Top = Lbl.Top + 5 
End Sub 
+5

Tại sao '" 1 "' ở cuối tên lớp trong phương thức 'add'? – Triztian

+0

Tôi không biết. Tôi biết rằng nó không hoạt động mà không có điều đó. –

+0

Tôi thực sự muốn biết tại sao nó phải là "Forms.CommandButton.1" quá – FinancialRadDeveloper

4

Biến thể của tôi về chủ đề ở trên. Điều này chỉ là cho một mảng 4x4 của các nút mặc dù. Tạo một userform và thêm nó vào mã của nó. Các khái niệm tương tự có thể được sử dụng với nhãn của bạn (hoặc xem câu trả lời trước):

Private cmdLots(20) As MSForms.CommandButton 

Private Sub UserForm_Initialize() 
For i = 1 To 4 
For j = 1 To 4 
    k = i + (4 * j) 
    Set cmdLots(k) = UserForm2.Controls.Add("Forms.CommandButton.1", "cmd1") 
    With cmdLots(k) 
     .Top = i * 25 
     .Left = (j * 80) - 50 
     .BackColor = RGB(50 * i, 50 * j, 0) 
     .Caption = "i= " & i & " j= " & j 
    End With 
Next j 
Next i 
End Sub 
+0

làm thế nào để sử dụng các nút mười sáu? – Qbik

+0

@Qbik đọc lên trên "WithEvents" và bạn sẽ thấy. – Robino

+0

Cũng đọc http://stackoverflow.com/questions/10130300/how-do-we-know-the-sender-of-the-buttons-in-vba – Robino

Các vấn đề liên quan