문제

다음 코드로 Excel Userform에서 버튼을 동적으로 만들고 있습니다.

With Me.CurrentFrame.Controls.Add("Forms.CommandButton.1")
    .Caption = "XYZ"
    .name = "AButton"
    .Font.Bold = True
    .ForeColor = &HFF&
    ... blah blah blah
End With

이 버튼을 클릭 할 때 실행할 함수를 할당하고 싶지만 버튼 자체의 일부로 속성이 없기 때문에이를 수행하는 간단한 방법을 찾을 수 없습니다.

위의 관용구를 사용하여이를 수행하는 방법이 있습니까? 이 모든 일에 대해 다른 방식으로 가야합니까?

도움이 되었습니까?

해결책

각 버튼에 대한 코드 / 이벤트 핸들러를 동적으로 만들어야합니다.

약간의 일이 필요합니다 - 여기를 참조하십시오. http://navpadexcel.blogspot.com/2006/11/httpwwcpearsoncomexcelvbehtm.html

더 나은 방법은 미리 양식에 많은 버튼을 만드는 것일 수 있습니다. 이벤트 핸들러 코드도 만듭니다. 처음에는 모두 숨겨지게하십시오.

그런 다음 양식이 열리면 버튼 캡션을 동적으로 변경하여 표시하고 이동할 수 있습니다. 처음에 만든 이벤트 코드는 예상대로 활성화 된 버튼에 연결됩니다.

다른 팁

Excel 형태로 동적으로 제어 이벤트를 추가합니다. 먼저 클래스 모듈에 이벤트를 추가해야합니다. 내 예를 들어, 나는 하나의 이벤트 인 btn_click ()와 함께 clstest라는 클래스 모듈을 추가 할 것입니다.

    '#### CLASS NAMED clsTEST
    Public WithEvents btn As MSForms.CommandButton
    Public frm As UserForm

    Dim iCount As Long

    Private Sub btn_Click()

    iCount = IIf(iCount < 1, 1, iCount + 1)
    btn.Caption = "Count " & Str(iCount)

End Sub
'### END CLASS

보시다시피, 이것이 할 유일한 일은 버튼의 캡션을 클릭 한 횟수로 설정하는 것입니다. 다음으로, 양식 코드에서 다음을 입력하십시오.

    Dim mColButtons As New Collection    '## SET A NEW COLLECTION

    Private Sub UserForm_Activate()
    '
    Dim btnEvent As clsTEST
    Dim ctl As MSForms.Control
    '
    Set ctl = Me.Controls.Add("Forms.CommandButton.1")
    '
    With ctl
    .Caption = "XYZ"
    .Name = "AButton"
    END With
    '
    Set btnEvent = new clsTEST   
    Set btnEvent.btn = ctl
    set btnEvent.frm = Me
    '
    mColButtons.add btnEvent
    'End Sub

양식을 활성화하면 버튼이 생성됩니다. 버튼을 클릭 할 때마다 캡션이 변경됩니다.

아래 코드가 작동해야합니다

Dim NewButton As OLEObject
Dim CodeModule As Object

Set NewButton = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
    Link:=False, DisplayAsIcon:=False, Left:=52.5, Top:=Hght, _
    Width:=202.5, Height:=26.25)
NewButton.Object.Caption = "Click Me!"
Set CodeModule = ActiveWorkbook.VBProject.VBComponents.VBE.ActiveCodePane.CodeModule
CodeModule.InsertLines CodeModule.CreateEventProc("Click", NewButton.Name) + 1, vbTab & "MsgBox ""Hello world"""
Sub Oval1_Click()
    file = ActiveWorkbook.Name
    Set Output = Workbooks.Add()
    ActiveWorkbook.SaveAs Filename:="Try.xls"        
    Sheets(1).Select        
    ActiveSheet.Buttons.Add(460, 10, 140, 30).Select
    ActiveSheet.Buttons.Text = "DATA"      
    ActiveSheet.Shapes("Button 1").Select
    Selection.OnAction = "Book1.xlsm!data_Click"
End Sub

Sub data_Click()      
    MsgBox "you have clicked me"       
    ActiveSheet.DrawingObjects.Delete        
End Sub

나는 이것을보고있다. OnClick 속성을 사용하여 매크로를 실행할 수있는 것 같습니다.

Command1.OnClick = "Macro1"

그런 다음 원하는 기능을 실행하는 이름으로 매크로를 만듭니다. 이것은 내가 더 나은 것을 찾을 때까지 이것에 대한 나의 해킹입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top