VBA Excel类模块成员未使用字符串填充



我创建了一个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,将结果保存在布尔变量中。

最新更新