programing

동적으로 작성된 단추에 코드 할당

css3 2023. 6. 9. 22:16

동적으로 작성된 단추에 코드 할당

Excel 사용자 양식에 동적으로 만든 단추를 가져와 매크로를 실행하려고 합니다.transfer내가 쓴 것.Module 1내 프로젝트의 "모듈" 섹션에 있습니다.

아래에 지금까지 작성한 코드를 실제로 생성할 수 있는 사용자 양식에 붙여넣었습니다.Transfer to Sheet프레임의 버튼(동적으로 생성하기도 했습니다) 하지만 어떤 이유로 VBA를 실행하면438 error라는 메시지Object doesn't support this property or method.

제가 이 문제를 해결할 수 있는 방법을 알려주실 수 있나요?

코드는 다음과 같습니다.

Dim framecontrol1 As Control

Set workitemframe = Controls.Add("Forms.Frame.1")
With workitemframe
    .Width = 400
    .Height = 400
    .Top = 160
    .Left = 2
    .ZOrder (1)
    .Visible = True
End With

workitemframe.Caption = "Test"
Set framecontrol1 = workitemframe.Controls.Add("Forms.commandbutton.1")

With framecontrol1
    .Width = 100
    .Top = 70
    .Left = 10
    .ZOrder (1)
    .Visible = True
    .Caption = "Transfer to Sheet"
End With
framecontrol1.OnAction = "transfer"

여기 예가 있습니다.당신의 필요에 맞게 수정해주세요 :)

이 예에서는 명령 단추를 만들고 이 단추에 코드를 할당하여 이 단추를 누르면 "Hello World"가 표시됩니다.

새 명령 단추를 동적으로 만들고 코드를 할당하는 명령 단추의 클릭 이벤트에 이 코드를 붙여넣습니다.

Option Explicit

Dim cmdArray() As New Class1

Private Sub CommandButton1_Click()
    Dim ctl_Command As Control
    Dim i As Long

    i = 1

    Set ctl_Command = Me.Controls.Add("Forms.CommandButton.1", "CmdXYZ" & i, False)

    With ctl_Command
        .Left = 100
        .Top = 100
        .Width = 255
        .Caption = "Click Me " & CStr(i)
        .Visible = True
    End With

    ReDim Preserve cmdArray(1 To i)
    Set cmdArray(i).CmdEvents = ctl_Command

    Set ctl_Command = Nothing

End Sub

클래스 모듈에 이 코드를 붙여넣습니다.

Option Explicit

Public WithEvents CmdEvents As MSForms.CommandButton

Private Sub CmdEvents_Click()

    MsgBox "Hello Word"

End Sub

스냅샷

여기에 이미지 설명 입력 여기에 이미지 설명 입력

코드를 사용자 양식에 프로그래밍 방식으로 추가해야 합니다.나는 이 vbax 기사의 코드를 참조로 사용했습니다.

아래 코드:

  1. 일반 모듈에서 실행됩니다.
  2. UserForm1이라는 사용자 양식에 단추를 추가합니다.
  3. 클릭 이벤트의 사용자 양식에 이 코드를 추가합니다.

    Private Sub CommandButton1_Click()
    Call Transfer
    End Sub
    

정상 모듈로부터 VBA

    Sub AddToForm()
    Dim UF As Object
    Dim frameCOntrol1 As Object
    Set UF = ActiveWorkbook.VBProject.VBComponents("UserForm1")
    Set frameCOntrol1 = UF.designer.Controls.Add("Forms.CommandButton.1")
    With frameCOntrol1
        .Width = 100
        .Top = 70
        .Left = 10
        .ZOrder (1)
        .Visible = True
        .Caption = "Transfer to Sheet"
    End With

    With UF.CodeModule
        .InsertLines 2, _
                     "Private Sub " & frameCOntrol1.Name & "_Click()" & Chr(13) & _
                     "Call Transfer" & Chr(13) & _
                     "End Sub"
    End With

End Sub

언급URL : https://stackoverflow.com/questions/10224511/assign-code-to-a-button-created-dynamically