문제

레이블과 버튼을 동적으로 만들고 사용자 형식의 프레임에 추가해야합니다. 어떻게해야합니까? 그것처럼 보인다 ~해야 한다 실제보다 쉽습니다.

도움이 되었습니까?

해결책

다음 코드는 컨트롤이있는 사용자 형식에서 프레임을 동적으로 채우는 방법을 보여줍니다 ...

내가 사용한 형태로 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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top