excel - VBA Excel 类模块成员未填充字符串
问题描述
我创建了Class Module
一个成员不持有/填充所需的字符串。其他成员都还好,就这一个。在Class Module
我把它分成两部分,因此不能按预期工作的部分是ArgeementDetails
-RebateDescription
当我通过代码时,我可以确认分配字符串/文本的行:RebateDescription = WantedText
是正确的并且通过了。分配给Class Module
:TT.AgreementConditions RebateDescription, ValidFrom, ValidTo
我有一个break
, 当我将光标悬停在RebateDescription
那里时,显示的文本是预期的,但是当我Debug.Print TT.RebateDescription
进入文本显示“”并且在即时窗口中没有打印任何内容。
解决这个问题的任何帮助都会很棒。
**请注意** 我Private TT As clsAgreementDetails
在Module
级别声明,因为我在多个Subs
.
课程模块
Option Explicit
Private Type TAgreement
ConditionName As String
ConditionPricingDate As String
ConditionRate As String
RateUnit As String
AgreementNo As String
RebateDescription As String
ValidFrom As String
ValidTo As String
End Type
Private This As TAgreement
Public Property Get ConditionName() As String
ConditionName = This.ConditionName
End Property
Public Property Get ConditionPricingDate() As String
ConditionPricingDate = This.ConditionPricingDate
End Property
Public Property Get ConditionRate() As String
ConditionRate = This.ConditionRate
End Property
Public Property Get RateUnit() As String
RateUnit = This.RateUnit
End Property
Public Property Get AgreementNo() As String
AgreementNo = This.AgreementNo
End Property
Public Sub HeaderConditions( _
ConditionName As String, _
ConditionPricingDate As String, _
ConditionRate As String, _
RateUnit As String, _
AgreementNo As String _
)
If Len(This.ConditionName) = 0 Then
This.ConditionName = ConditionName
This.ConditionPricingDate = ConditionPricingDate
This.ConditionRate = ConditionRate
This.RateUnit = RateUnit
This.AgreementNo = AgreementNo
End If
End Sub
Public Property Get RebateDescription() As String
RebateDescription = This.RebateDescription
End Property
Public Property Get ValidFrom() As String
ValidFrom = This.ValidFrom
End Property
Public Property Get ValidTo() As String
ValidTo = This.ValidTo
End Property
Public Sub AgreementConditions( _
RebateRecipeint As String, _
ValidFrom As String, _
ValidTo As String _
)
If Len(This.RebateDescription) = 0 Then
This.RebateDescription = RebateDescription
This.ValidFrom = ValidFrom
This.ValidTo = ValidTo
End If
End Sub
主副
Public Sub VF03_Process()
<snip code>
Do
<snip code>
' Create new class ready to fill with data.
Set TT = New clsAgreementDetails
<snip code>
FillAgreementConditions
<snip code>
Loop
End Sub
SUB TO 填充类模块
Private Sub FillAgreementConditions()
Do
Dim ColNum As Long
ColNum = ColNum + 1
On Error Resume Next
Dim TestText As String
TestText = SAPSes.findById("wnd[1]/usr/lbl[" & ColNum & ",1]").Text
Dim WantedText As String
WantedText = SAPSes.findById("wnd[1]/usr/lbl[" & ColNum & ",3]").Text
' Only update values if they are found.
If Err.Number = 0 Then
Select Case TestText
Case "Description of agreement"
Dim RebateDescription As String
RebateDescription = WantedText
Debug.Print "Added Desc: "; RebateDescription
Case "Valid From"
Dim ValidFrom As String
ValidFrom = WantedText
Debug.Print "Added From: "; ValidFrom
Case "Valid to"
Dim ValidTo As String
ValidTo = WantedText
Debug.Print "Added To: "; ValidTo
' Once found Valid To, last item to find, exit loop.
Exit Do
End Select
End If
On Error GoTo 0
Loop Until ColNum = 1000
TT.AgreementConditions RebateDescription, ValidFrom, ValidTo
' Test if results are expected
Debug.Print TT.RebateDescription
Debug.Print TT.ValidFrom
Debug.Print TT.ValidTo
End Sub
解决方案
在 Sub AgreementConditions 中,您没有使用 RebateRecipeint 参数。您只需将 This.RebateDescription 设置为自身。你要:
This.RebateDescription = RebateRecipeint
小心On Error Resume Next
。你的大部分循环都在它的魔咒之下。通常,您会On Error Goto 0
在尝试获取字符串后尽快放入,并Err.Number <> 0
在之前检查,将结果保存在布尔变量中。