是否可以从UserForm2的代码访问Excel UserForm1的动态对象?不是来自模块的代码
我有一个带有动态标签声明和事件的“类”模块是否可以从UserForm2的代码访问Excel UserForm1的动态对象?不是来自模块的代码,excel,vba,Excel,Vba,我有一个带有动态标签声明和事件的“类”模块 Option Explicit Public WithEvents ClassLabel As MSForms.Label Public Sub ClassLabel_Click() If InStr(ClassLabel.Name, "LB_Label") Then Set CurrentLabel = ClassLabel 'Bla Bla Bla End If End
Option Explicit
Public WithEvents ClassLabel As MSForms.Label
Public Sub ClassLabel_Click()
If InStr(ClassLabel.Name, "LB_Label") Then
Set CurrentLabel = ClassLabel
'Bla Bla Bla
End If
End Sub
我在UserForm1的“FR_Runtime”框架中创建了15个动态标签,我将其保存在普通模块1的Controls_Init()子中的数组中,如下所示
Option Explicit
Public gArrayClassLabel() As New Class
Public CurrentLabel As MSForms.Label
Public Sub Controls_Init()
Dim Row As Integer
Dim nRow As Integer
Dim H As Integer
Dim LB_Label As MSForms.Label
nRow = 15
H = 30
ReDim gArrayClassLabel(1 To nRow)
For Row = 1 To nRow
Set LB_Label = UserForm1.FR_Runtime.Controls.Add("Forms.Label.1")
With LB_Label
.Name = "LB_Label" & Row
.Caption = " Label " & Row & ", 2"
.Left = 100
.Top = H
.Width = 75
.Height = 18
.ForeColor = vbRed
.BackColor = vbWindowBackground
.BorderStyle = fmBorderStyleSingle
.SpecialEffect = fmSpecialEffectSunken
End With
Set gArrayClassLabel(Row).ClassLabel = LB_Label
H = H + 30
Next Row
End Sub
Private Sub FR_Runtime_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Set glbCurrentLabel = gArrayClassLabel(5).ClassLabel
With UserForm1.TextBox1
.Text = Trim$(glbCurrentLabel.Caption)
.Left = glbCurrentLabel.Left
.Top = glbCurrentLabel.Top
.SelStart = 0
.SelLength = Len(glbCurrentLabel.Caption)
End With
End Sub
Dim NumDynamicLabel As New Class
'I use Let Content property to obtain the fifth dynamic label Caption
NumDynamicLabel.Content = 5
Dim CaptionDynamicLabel As String
'I use the Get Content Property to retrieve Caption of fifth dynamic label
CaptionDynamicLabel = NumDynamicLabel.Content
从我的UserForm1.FR_Runtime_Exit()事件(或任何其他UserForm1,Module1代码),我可以访问第五个动态标签,如下所示
Option Explicit
Public gArrayClassLabel() As New Class
Public CurrentLabel As MSForms.Label
Public Sub Controls_Init()
Dim Row As Integer
Dim nRow As Integer
Dim H As Integer
Dim LB_Label As MSForms.Label
nRow = 15
H = 30
ReDim gArrayClassLabel(1 To nRow)
For Row = 1 To nRow
Set LB_Label = UserForm1.FR_Runtime.Controls.Add("Forms.Label.1")
With LB_Label
.Name = "LB_Label" & Row
.Caption = " Label " & Row & ", 2"
.Left = 100
.Top = H
.Width = 75
.Height = 18
.ForeColor = vbRed
.BackColor = vbWindowBackground
.BorderStyle = fmBorderStyleSingle
.SpecialEffect = fmSpecialEffectSunken
End With
Set gArrayClassLabel(Row).ClassLabel = LB_Label
H = H + 30
Next Row
End Sub
Private Sub FR_Runtime_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Set glbCurrentLabel = gArrayClassLabel(5).ClassLabel
With UserForm1.TextBox1
.Text = Trim$(glbCurrentLabel.Caption)
.Left = glbCurrentLabel.Left
.Top = glbCurrentLabel.Top
.SelStart = 0
.SelLength = Len(glbCurrentLabel.Caption)
End With
End Sub
Dim NumDynamicLabel As New Class
'I use Let Content property to obtain the fifth dynamic label Caption
NumDynamicLabel.Content = 5
Dim CaptionDynamicLabel As String
'I use the Get Content Property to retrieve Caption of fifth dynamic label
CaptionDynamicLabel = NumDynamicLabel.Content
从UserForm2,我可以访问在设计时创建的标签:UserForm1.Label3.Caption=“这是一个设计时标签”
我可以从UserForm2的子类访问gArrayClassLabel(5).ClassLabel吗?不是来自Module1代码。谢谢Tragamor,我没有考虑类modules属性。这是新的“类”模块 我可以从代码中的任意位置访问第五个动态标签标题,如下所示
Option Explicit
Public gArrayClassLabel() As New Class
Public CurrentLabel As MSForms.Label
Public Sub Controls_Init()
Dim Row As Integer
Dim nRow As Integer
Dim H As Integer
Dim LB_Label As MSForms.Label
nRow = 15
H = 30
ReDim gArrayClassLabel(1 To nRow)
For Row = 1 To nRow
Set LB_Label = UserForm1.FR_Runtime.Controls.Add("Forms.Label.1")
With LB_Label
.Name = "LB_Label" & Row
.Caption = " Label " & Row & ", 2"
.Left = 100
.Top = H
.Width = 75
.Height = 18
.ForeColor = vbRed
.BackColor = vbWindowBackground
.BorderStyle = fmBorderStyleSingle
.SpecialEffect = fmSpecialEffectSunken
End With
Set gArrayClassLabel(Row).ClassLabel = LB_Label
H = H + 30
Next Row
End Sub
Private Sub FR_Runtime_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Set glbCurrentLabel = gArrayClassLabel(5).ClassLabel
With UserForm1.TextBox1
.Text = Trim$(glbCurrentLabel.Caption)
.Left = glbCurrentLabel.Left
.Top = glbCurrentLabel.Top
.SelStart = 0
.SelLength = Len(glbCurrentLabel.Caption)
End With
End Sub
Dim NumDynamicLabel As New Class
'I use Let Content property to obtain the fifth dynamic label Caption
NumDynamicLabel.Content = 5
Dim CaptionDynamicLabel As String
'I use the Get Content Property to retrieve Caption of fifth dynamic label
CaptionDynamicLabel = NumDynamicLabel.Content
您应该能够在module1代码中添加get/set类型函数以允许accessTanks!!特拉加莫