必须有一种方法来做到这一点,但我只是不知道如何。使用变量作为参考VBA
说我有一个具有这些对象
Set test = New clsMonth
With test
.January = 0.7136/20
.February = 0.6755/20
.March = 0.6528/20
.April = 0.7773/20
.May = 0.8213/20
.June = 0.8715/20
.July = 0.9/20
.August = 1.0243/20
.September = 1.0516/20
.October = 0.8514/20
.November = 0.7095/20
.December = 0.6994/20
End With
一个数据类型和我有我想引用存储在数组中的人。我如何使用该数组来引用它们。我已经试过这样的事情(这是草率的,但我很快就做了一个例子):
Set test = New clsMonth
With test
.January = 0.7136/20
.February = 0.6755/20
.March = 0.6528/20
.April = 0.7773/20
.May = 0.8213/20
.June = 0.8715/20
.July = 0.9/20
.August = 1.0243/20
.September = 1.0516/20
.October = 0.8514/20
.November = 0.7095/20
.December = 0.6994/20
End With
Dim month(1 To 2) As String
month(1) = "March"
MsgBox test.month(1)
谢谢你在先进。这将在很多方面帮助我!
ClsMonth:
Option Explicit
'encapsulating values to be exposed as properties
Private Type TMonth
January As Single
February As Single
March As Single
April As Single
May As Single
June As Single
July As Single
August As Single
September As Single
October As Single
November As Single
December As Single
End Type
Private this As TMonth
'property accessors for each member
'this "talks" to the form code to assign and retrieve values for each month
Public Property Get January() As Single
January = this.January
End Property
Public Property Let January(ByVal value As Single)
this.January = value
End Property
Public Property Get February() As Single
February = this.February
End Property
Public Property Let February(ByVal value As Single)
this.February = value
End Property
Public Property Get March() As Single
March = this.March
End Property
Public Property Let March(ByVal value As Single)
this.March = value
End Property
Public Property Get April() As Single
April = this.April
End Property
Public Property Let April(ByVal value As Single)
this.April = value
End Property
Public Property Get May() As Single
May = this.May
End Property
Public Property Let May(ByVal value As Single)
this.May = value
End Property
Public Property Get June() As Single
June = this.June
End Property
Public Property Let June(ByVal value As Single)
this.June = value
End Property
Public Property Get July() As Single
July = this.July
End Property
Public Property Let July(ByVal value As Single)
this.July = value
End Property
Public Property Get August() As Single
August = this.August
End Property
Public Property Let August(ByVal value As Single)
this.August = value
End Property
Public Property Get September() As Single
September = this.September
End Property
Public Property Let September(ByVal value As Single)
this.September = value
End Property
Public Property Get October() As Single
October = this.October
End Property
Public Property Let October(ByVal value As Single)
this.October = value
End Property
Public Property Get November() As Single
November = this.November
End Property
Public Property Let November(ByVal value As Single)
this.November = value
End Property
Public Property Get December() As Single
December = this.December
End Property
Public Property Let December(ByVal value As Single)
this.December = value
End Property
'end of property accessors'
Public Function ValueFor(ByVal monthName As String) As Single 'function to take month name and respond w property value
On Error GoTo CleanFail
Dim instance As Object
Set instance = Me 'CallByName can't take "me" directly for some reason, must create an instance of me
Dim result As Single
result = CallByName(instance, monthName, VbGet)
CleanExit:
ValueFor = result
Exit Function
CleanFail:
result = 0
Resume CleanExit
End Function
你的意思'chillwater',或'test'?尝试'Msgbox(CallByName测试,月(1),vbGet)' –
对不起,试图改变一切测试,但错过了一个。我试试这样。过了漫长的一天,忘记了CallByName – ct4242
我以前见过这段代码......并且我特别记得使用'CallByName'来解决它。 –