VBA:如何从类中获取变量?

时间:2012-12-24 18:46:44

标签: class excel-vba module subroutine vba

我创建了名为'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

现在在一个新的子目录中我想得到值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中计算的值。我怎样才能从类模块中获取价值,或者有更好的方法。不想使用call sub(value)。

提前感谢您的帮助!

阿米尔

2 个答案:

答案 0 :(得分:2)

您在makeArray()内致电test()。为什么不使用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

如果仅使用sub s:

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

答案 1 :(得分:0)

您必须使类的实例成为全局或使类静态。下面为类设置变量,但是你在方法中实例化了类,因此当方法完成时它不在范围之内。

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