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。还从你的网站上获得了设置类模块的技巧-