代码之家  ›  专栏  ›  技术社区  ›  Mahhdy

VBA类模块:从类内的对象获取属性

  •  1
  • Mahhdy  · 技术社区  · 6 年前

    我有一个包含一些属性和控制元素的类模块。如何在类级事件中获取这些控件的属性值?我试过了

    me.property 
    

    control.parent.property 
    

    但不起作用。我认为应该有一种方法来处理模块内类模块的每个实例的属性,不是吗?

    我的班级模块:Cworker

    Public WithEvents img1 As MSForms.Image
    Private AcnS
    Dim rng1 As Range, rng2 As Range, rng3 As Range
    
    ' Property Definitions
    
    Public Property Get Aircraft() As String
        Aircraft = Acn
    End Property
    Public Property Let Aircraft(Value As String)
        Acn = Value
    End Property
    
    ' Events Procedures
    
    Private Sub img1_Click()  ' Showing Progress Form
        With ThisWorkbook.Sheets("Performance")
            Set rng1 = .Range("ProgCrit")
            Set rng2 = .Range("Progress")
            Set rng3 = .Range("op_log")
        End With
        frmprogress.LAc = Me.Aircraft 
        rng1.Cells(2, 1) = Me.Aircraft 
        rng3.AdvancedFilter xlFilterCopy, rng1, rng2
        oprecord.Calculate
        frmprogress.Show
    End Sub
    

    塔恩克斯, M

    1 回复  |  直到 6 年前
        1
  •  2
  •   Ali Reza    6 年前

    我想你在第二行有一个拼写错误: 我想,根据我的测试,你可以参考我。属性,不带前缀的属性本身,以及指定的类变量。你也可以试试。

    Public WithEvents img1 As MSForms.Image
    Private Acn$ ' As String if you meant!
    Dim rng1 As Range, rng2 As Range, rng3 As Range
    
    ' Property Definitions
    
    Public Property Get Aircraft() As String
        Aircraft = Acn
    End Property
    Public Property Let Aircraft(Value As String)
        Acn = Value
    End Property
    
    ' Events Procedures
    
    Private Sub img1_Click()  ' Showing Progress Form
        With ThisWorkbook.Sheets("Performance")
            Set rng1 = .Range("ProgCrit")
            Set rng2 = .Range("Progress")
            Set rng3 = .Range("op_log")
        End With
        frmprogress.LAc = Me.Aircraft 
        rng1.Cells(2, 1) = Me.Aircraft 
        rng3.AdvancedFilter xlFilterCopy, rng1, rng2
        oprecord.Calculate
        frmprogress.Show
    End Sub