必須有一種方法來做到這一點,但我只是不知道如何。使用變量作爲參考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'來解決它。 –