VBA Excel类模块成员未填充字符串
我创建了一个VBA Excel类模块成员未填充字符串,excel,vba,Excel,Vba,我创建了一个类模块,其中一个成员未持有/填充所需字符串。所有其他成员都很好,就这一个。在类模块中我将其一分为二,因此不作为例外的部分是目标细节-回扣描述 当我单步遍历代码时,我可以确认分配字符串/文本的行:rebeddedescription=WantedText是正确的,并且已传递。分配给类模块的行:TT.AgreementConditions RebatedDescription,ValidFrom,ValidTo我有一个中断,当我将光标悬停在RebatedDescription上时,显示的
类模块
,其中一个成员未持有/填充所需字符串。所有其他成员都很好,就这一个。在类模块中
我将其一分为二,因此不作为例外的部分是目标细节
-回扣描述
当我单步遍历代码时,我可以确认分配字符串/文本的行:rebeddedescription=WantedText
是正确的,并且已传递。分配给类模块的行
:TT.AgreementConditions RebatedDescription,ValidFrom,ValidTo
我有一个中断
,当我将光标悬停在RebatedDescription
上时,显示的文本与预期一致,但当我转到调试.Print TT.RebatedDescription
时,文本显示“”在即时窗口中,没有打印任何内容
解决这个问题的任何帮助都将是巨大的
**请注意**
我在模块
级别将专用TT声明为clsAgreementDetails
,因为我在多个子系统
中使用它
类模块
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
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
主接头
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
在子协议条件中,您没有使用RebateRecipeint参数。您只需将此.rebedDescription设置为自身。你想要:
This.RebateDescription = RebateRecipeint
注意下一步继续时出错时的
。你的大部分循环都在它的咒语下。通常,在尝试获取字符串后,您会尽快将设置为Error Goto 0
,并在之前检查Err.Number 0
,将结果保留在布尔变量中。Spot On On!我将“RebeateRecipient”改为“RebeateDescription”,但错过了这个。。。自我提示:使用查找/替换。。为帮助干杯!谢谢你的小费,伙计。我将检查我的代码。干杯@alowflyingpig注:Rubberduck@mathieuguin信不信由你,我用的是Rubberduck。还从你的网站上获得了设置类模块的技巧-