Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以从UserForm2的代码访问Excel UserForm1的动态对象?不是来自模块的代码_Excel_Vba - Fatal编程技术网

是否可以从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!!特拉加莫