簡體   English   中英

在 VBA excel 中控制用戶窗體上動態創建的控件

[英]Controlling dynamically created controls on a userform in VBA excel

我創建了一個多頁用戶表單,它動態地填充了一組相同的框架,並且每個框架都有 2 個基於先前用戶選擇的選項按鈕。 我正在嘗試檢查是否至少在每一幀中選擇了一個選項按鈕,但似乎沒有訪問代碼中的選項按鈕,即使我知道它們的名稱是什么。 然后我會將選擇轉移到工作表中,因此需要能夠看到他們選擇的內容。 任何幫助將不勝感激,我很少將 VBA 用於 excel,因此老實說總是很困難。

在此處輸入圖像描述

我越來越近了,我已經使用了另一篇文章的這段代碼並在我嘗試我正在做的事情時稍微改變了它。 慢慢地到達那里。 :)

我不確定 Class 模塊部分在做什么,但它在工作。

Forms:用戶表單 1




Option Explicit
 
Friend Sub OptionButtonSngClick(o As MSForms.OptionButton)
Dim cControlCheck As MSForms.Control
Dim cControlCheck1 As MSForms.Control
Dim cControlFrame As MSForms.Control
Dim strName As String


If Left(o.Name, 2) = "qN" Then
    o.BackColor = RGB(256, 0, 0)
ElseIf Left(o.Name, 2) = "qY" Then
    o.BackColor = RGB(0, 256, 0)
End If

For Each cControlCheck In UserForm1.Controls
    If TypeName(cControlCheck) = "Frame" Then
    For Each cControlCheck1 In Me.Controls(cControlCheck.Name).Controls
        If TypeName(cControlCheck1) = "OptionButton" Then
            If cControlCheck1 = False Then
                cControlCheck1.BackColor = RGB(240, 240, 240)
            End If
        End If
    Next
                
    End If
Next
      

End Sub

Friend Sub cmdCheck_Click()
Dim cControlCheck2 As MSForms.Control
Dim cControlCheck3 As MSForms.Control

Dim cCollection As Collection

Set cCollection = New Collection

For Each cControlCheck2 In UserForm1.Controls
    If TypeName(cControlCheck2) = "Frame" Then
    For Each cControlCheck3 In Me.Controls(cControlCheck2.Name).Controls
        If TypeName(cControlCheck3) = "OptionButton" Then
               cCollection.Add cControlCheck3
              
        End If
    Next
                
    End If
Next

If cCollection(1).Value = False And cCollection(2).Value = False Then

MsgBox ("Make a selection")


End If


End Sub

Class 模塊:OPtionButtonEvents

Option Explicit
 
  Private WithEvents ob As MSForms.OptionButton
  Private CallBackParent As UserForm1
  Private CallBackParent1 As UserForm1
 
Private Sub ob_Change()

End Sub

    Private Sub ob_Click()
    
    Call CallBackParent.OptionButtonSngClick(ob)
    
    End Sub

  Private Sub ob_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
       Call CallBackParent.OptionButtonDblClick(ob)
  End Sub
 
  Friend Sub WatchControl(oControl As MSForms.OptionButton, oParent As UserForm1)
       Set ob = oControl
       Set CallBackParent = oParent
  End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM