Keresés

Új hozzászólás Aktív témák

  • Mutt

    senior tag

    válasz Pakliman #54199 üzenetére

    Szia,

    Két megoldást tudok javasolni:
    1. A Click eseményeket beteszed egy saját subroutinba és azonnal meghívod ahogy a vezérlőt (választó gombot) létrehoztad.

    Sub RunClick(obj As Object)
        Dim frm As MSForms.UserForm
        
        Set frm = obj.Parent
        
        With frm
            Select Case obj.Name
                Case "opbXYZ1"
                    .Label1.Caption = obj.Name & ": " & obj.Value
                Case "opbXYZ2"
                    frm.BackColor = 13882323
                    MsgBox "hello world"
                Case "opbXYZ3"
                    frm.BackColor = 14481663
            End Select
            
        End With
    End Sub

    A Select Case-el csak bemutattam hogy eltérő ágakat tudsz létrehozni.

    2. Megvárod, hogy a vezérlő létrejöjjön és csak utánna változtatod meg az értékét.
    A kódodon csak minimálisan változtattam (tartalmazza az 1-es lehetőséget is), a végén van a 2-es opció. Ott véletlenszerűen megváltoztatom az egyik vezérlő értékét, ekkor már le fog futni a Change esemény-

    Private Sub CommandButton1_Click()
        Dim ctl_OpB As MSForms.OptionButton
        Dim i As Long
        
        ReDim opbArray(1 To 3)
        
        For i = 1 To 3
          Set ctl_OpB = Me.Controls.Add("Forms.OptionButton.1", "opbXYZ" & i, False)
          
          With ctl_OpB
              .Left = 100
              .Top = 150 + (i * 20)
              .Width = 100
              .Caption = "opb_" & CStr(i)
              .Visible = True
          End With
      
        'egyik megoldás, hogy létrehozáskor elindítod a saját kódod
          Call RunClick(ctl_OpB)
      
          Set opbArray(i).OptionButton = ctl_OpB
        Next i
        Set ctl_OpB = Nothing
        
        'másik megoldás, hogy létrehozás után változtatod meg az értékét
        Dim r As Double
        Randomize
        r = Int(Rnd * 3) + 1
        
        opbArray(r).OptionButton.Value = Not opbArray(r).OptionButton.Value
    End Sub

    A class module-ban csak ennyi van:

    Public WithEvents OptionButton As MSForms.OptionButton
    Private Sub OptionButton_Change()
        Dim frm As MSForms.UserForm
        
        Set frm = OptionButton.Parent
        
        With frm
            .Label1.Caption = .Label1.Caption & vbNewLine & OptionButton.Name & " - " & OptionButton.Value
        End With
    End Sub

    Próbáld ki.

    üdv

  • Fferi50

    Topikgazda

    válasz Pakliman #54199 üzenetére

    Szia!
    Nem egészen értem, hogy miért szeretnél makróval eseményt indítani egy újonnan felvett vezérlőre. Ezeket pont a userrel való kommunikációra használjuk. Pláne úgy, hogy egy aktív userformon van. Ha végig fut a makró, a userform fennmarad, akkor kattintgathat a user, vezérelheti a folyamatokat.
    Persze értem én, hogy tanulni szeretnél, csak nem logikus szerintem.
    Üdv.

  • föccer

    nagyúr

    válasz Pakliman #54199 üzenetére

    Simán Call-al meg kell hívni.

    Call OptionButton_Click()

    vagy

    Call UserForm1.OptionButton_Click()

Új hozzászólás Aktív témák

Hirdetés