我创建了一个Class Module
,其中一个成员没有持有/填充所需的字符串。所有其他成员都还好,只有这个。在Class Module
中,我将其一分为二,因此不按预期工作的部分是ArgeementDetails
-RebateDescription
我可以确认,当我遍历代码时,分配字符串/text:RebateDescription = WantedText
的行是正确的,并且已通过。分配给Class Module
:TT.AgreementConditions RebateDescription, ValidFrom, ValidTo
的行我有一个break
,当我将光标悬停在RebateDescription
上时,显示的文本是预期的,然而当我进入Debug.Print TT.RebateDescription
时,文本显示"并且在直接窗口中不打印任何内容。
任何解决这一问题的帮助都将是巨大的。
**请注意**我在Module
级别声明Private TT As clsAgreementDetails
,因为我在几个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-FILL类模块
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
在子协议条件中,您没有使用RebateRecipeint参数。您只需将This.RebateDescription设置为其自身。您想要:
This.RebateDescription = RebateRecipeint
小心On Error Resume Next
。你的大部分循环都被它迷住了。通常,您会在尝试获取字符串后尽快放入On Error Goto 0
,并在之前检查Err.Number <> 0
,将结果保存在布尔变量中。