【问题标题】:VBA: How can I get a variable from a class?VBA:如何从类中获取变量?
【发布时间】:2012-12-24 18:46:44
【问题描述】:

我已经创建了名为“class1”的类:

Private ka As Variant
Private ra As Variant

Public Property Get kolom() As Variant
    kolom = ka
End Property

Public Property Get rij() As Variant
    rij = ra
End Property

Public Property Let kolom(value As Variant)
    ka = value
End Property

Public Property Let rij(value As Variant)
    ra = value
End Property

然后在一个普通的模块子中我定义了变量:

Public Sub MakeArray(OutputSheet As Variant)
Dim igeg As Class1
Set igeg = New Class1
igeg.kolom = 47
igeg.rij = 559
End Sub

现在在一个新的 sub 中,我想获得 47 和 559 的值,但我不知道该怎么做。我尝试了以下方法,但 ik 没有给出任何价值:

sub test()
Dim igeg As Class1
newkolom = igeg.kolom
Msgbox igeg.kolom
End sub

或尝试以下但没有结果:

Public Function Test1() As Class1
Set Test1 = New Class1

End Function

Public Sub test()
Dim newigeg As Class1
Set newigeg = Test1

Msgbox igeg.kolom
End sub

其实我的想法是我想在另一个 sub 中使用 sub 1 中计算的值。我如何从类模块中获取价值或有更好的方法。不想使用调用 sub(value)。

提前感谢您的帮助!

阿米尔

【问题讨论】:

  • 请看一下我给出的两种方法的答案。 :) 试用后请评论。
  • @Amit 我给完整的问题 +1,因为你已经展示了正确的相关代码。这有助于通过最可能的答案来公正地解决您的问题:)

标签: class excel module subroutine vba


【解决方案1】:

您在test() 内调用makeArray()。为什么不使用makeArray() 作为函数?因为 Function 可以返回一个对象/值。强烈建议在您的情况下使用函数。

尝试以下方法:

Public Function MakeArray(ByRef OutputSheet As Variant) as Class1
Dim igeg As Class1
Set igeg = New Class1
igeg.kolom = 47
igeg.rij = 559
set MakeArray = igeg
End Function


sub test()
Dim igeg As Class1
set igeg = MakeArray(myvar)
Msgbox igeg.kolom
End sub

如果只使用subs 那么:

Public Sub MakeArray(ByRef OutputSheet As Variant, ByRef igeg As Class1)
 igeg.kolom = 47
 igeg.rij = 559
End Sub


Sub test()
 Dim myvar As Variant
 Dim igeg As Class1

  Set igeg = New Class1

  Call MakeArray(myvar, igeg)
  MsgBox igeg.kolom
End Sub

【讨论】:

    【解决方案2】:

    您必须将类的实例设为全局或将类设为静态。下面为类设置变量,但在方法中实例化类,因此当方法完成时它超出范围。

    Public Sub MakeArray(OutputSheet As Variant)
    Dim igeg As Class1
    Set igeg = New Class1
    igeg.kolom = 47
    igeg.rij = 559
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-18
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      相关资源
      最近更新 更多