VBA를 사용한 Excel userform의 프레임에 컨트롤 추가
문제
레이블과 버튼을 동적으로 만들고 사용자 형식의 프레임에 추가해야합니다. 어떻게해야합니까? 그것처럼 보인다 ~해야 한다 실제보다 쉽습니다.
해결책
다음 코드는 컨트롤이있는 사용자 형식에서 프레임을 동적으로 채우는 방법을 보여줍니다 ...
내가 사용한 형태로 frame1이라는 프레임 컨트롤이 있었으므로 userform_initialize에서 frame1.controls.add를 호출하여 프레임에 컨트롤을 포함합니다. 사용자 형식 코드 모듈에서 정의한 Wecevents 컨트롤 변수로 반환되는 컨트롤을 설정하여 원하는 컨트롤에 대한 이벤트에 응답 할 수 있습니다.
따라서이 메소드를 사용하면 생성 한 컨트롤에 대해 원하는 이벤트 코드를 사전 작성해야합니다 ...
또한 상단, 왼쪽, 너비 및 높이 특성이 반드시 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
다른 팁
위의 주제에 대한 나의 변형. 이것은 4x4 배열의 버튼을위한 것입니다. userform을 만들고 코드에 추가하십시오. 레이블과 함께 동일한 개념을 사용할 수 있습니다 (또는 이전 답변 참조).
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
제휴하지 않습니다 StackOverflow