VBA 检测文本颜色 IBM PCOMM
VBA detecting text color IBM PCOMM
最近,我的 IBM PCOMM 在工作中升级到了 12.0.0.1 版本。从那以后,如果我试图检测空白 space,并且之前已经存在某些内容,那么当我使用 autECLPS.GetText
时,即使我看到的都是黑色,该文本也会出现。我需要一种方法来查看是否有隐藏文本,以便我知道我可以继续进行下一个过程。我一直在使用 autECLPS.GetTextRect
来查看我是否可以匹配整个文本块,但这变得很乏味。有什么建议吗?
已更新
这是我目前的情况:
ElseIf LineCount < 3 Then
' If we've gone through less than three lines, we need
' to determine if the next line is visible.
' ***************************************************************
' Due to IBM PCOMM changing their process from actually clearing
' screens when going from one to the next to changing the
' color of the previous data, there may be some ghost data
' present. This code checks to see if any previous data is
' hidden from view and determines whether or not to continue.
' ***************************************************************
If SMonth = EMonth Or SMonth <> EMonth And j > 1 And k > 1 Then
If ScreenName = "MHI" And EditWarnMsg = "E065NO MORE CLMS ON FILE," Then
Result = objUNET.autECLPS.GetTextRect(SvcLn1, 1, SvcLn3, 80)
If Left(Result, 2) = POS(j) And Trim(Mid(Result, 4, 6)) = Serv(j) And Trim(Mid(Result, 36, 2)) = RC(j) Then
Exit Do
ElseIf Left(Result, 2) = POS(j - 1) And Trim(Mid(Result, 4, 6)) = Serv(j - 1) And Trim(Mid(Result, 36, 2)) = RC(j - 1) Then
Exit Do
ElseIf Left(Result, 2) = POS(j - 2) And Trim(Mid(Result, 4, 6)) = Serv(j - 2) And Trim(Mid(Result, 36, 2)) = RC(j - 2) Then
Exit Do
ElseIf Left(Result, 2) = POS(j - 3) And Trim(Mid(Result, 4, 6)) = Serv(j - 3) And Trim(Mid(Result, 36, 2)) = RC(j - 3) Then
Exit Do
' If the initial If criteria renders ICN to not have been
' found, this will cause a range error. We want to resume
' on to the next process if such error occurs.
On Error Resume Next
ElseIf Trim(Mid(Result, 165, 10)) = ICN(k) And Trim(Mid(Result, 28, 10)) = Draft(k) Then
Exit Do
ElseIf Trim(Mid(Result, 165, 10)) = ICN(k - 1) And Trim(Mid(Result, 28, 10)) = Draft(k - 1) Then
Exit Do
On Error GoTo 0
Else
GoTo POSBlank
End If
End If
End If
End If
End If
在收到有关 SO 的人才的建议并进行更多研究后,我将我的代码更改为一个可行的解决方案。和原来的差别不大,但是更靠谱
If SMonth = EMonth Or SMonth <> EMonth And j > 1 And k > 1 Then
If ScreenName = "MHI" And EditWarnMsg = "E065NO MORE CLMS ON FILE," Then
' Attempt to refresh the connection list
' to get current data on the screen.
objConnMgr.autECLConnList.Refresh
Result = objUNET.auteclps.GetTextRect(SvcLn1, 1, SvcLn3, 80)
' See if we've already processed this place of service
If Left(Result, 2) = POS(j - 1) Or Left(Result, 2) = POS(j - 2) Or Left(Result, 2) = POS(j - 3) Then
' See if we've already processed this service code matching the POS
If Trim(Mid(Result, 4, 6)) = Serv(j - 1) Or Trim(Mid(Result, 4, 6)) = Serv(j - 2) Or Trim(Mid(Result, 4, 6)) = Serv(j - 3) Then
' See if we've already processed this remark code matching the POS and service code
If Trim(Mid(Result, 36, 2)) = RC(j - 1) Or Trim(Mid(Result, 36, 2)) = RC(j - 2) Or Trim(Mid(Result, 36, 2)) = RC(j - 3) Then
' If start month equals end month, stop the process
If SMonth = EMonth Then
Exit Do
Else
GoTo POSBlank ' Continue process by going to label
End If
End If
End If
' See if we've already processed this ICN
If Trim(Mid(Result, 165, 10)) = ICN(k - 1) Or Trim(Mid(Result, 165, 10)) = ICN(k - 2) Then
' See if we've already processed this draft number matching the ICN
If Trim(Mid(Result, 28, 10)) = Draft(k - 1) Or Trim(Mid(Result, 28, 10)) = Draft(k - 2) Then
If SMonth = EMonth Then
Exit Do
Else
GoTo POSBlank
End If
End If
End If
End If
End If
End If
最近,我的 IBM PCOMM 在工作中升级到了 12.0.0.1 版本。从那以后,如果我试图检测空白 space,并且之前已经存在某些内容,那么当我使用 autECLPS.GetText
时,即使我看到的都是黑色,该文本也会出现。我需要一种方法来查看是否有隐藏文本,以便我知道我可以继续进行下一个过程。我一直在使用 autECLPS.GetTextRect
来查看我是否可以匹配整个文本块,但这变得很乏味。有什么建议吗?
已更新
这是我目前的情况:
ElseIf LineCount < 3 Then
' If we've gone through less than three lines, we need
' to determine if the next line is visible.
' ***************************************************************
' Due to IBM PCOMM changing their process from actually clearing
' screens when going from one to the next to changing the
' color of the previous data, there may be some ghost data
' present. This code checks to see if any previous data is
' hidden from view and determines whether or not to continue.
' ***************************************************************
If SMonth = EMonth Or SMonth <> EMonth And j > 1 And k > 1 Then
If ScreenName = "MHI" And EditWarnMsg = "E065NO MORE CLMS ON FILE," Then
Result = objUNET.autECLPS.GetTextRect(SvcLn1, 1, SvcLn3, 80)
If Left(Result, 2) = POS(j) And Trim(Mid(Result, 4, 6)) = Serv(j) And Trim(Mid(Result, 36, 2)) = RC(j) Then
Exit Do
ElseIf Left(Result, 2) = POS(j - 1) And Trim(Mid(Result, 4, 6)) = Serv(j - 1) And Trim(Mid(Result, 36, 2)) = RC(j - 1) Then
Exit Do
ElseIf Left(Result, 2) = POS(j - 2) And Trim(Mid(Result, 4, 6)) = Serv(j - 2) And Trim(Mid(Result, 36, 2)) = RC(j - 2) Then
Exit Do
ElseIf Left(Result, 2) = POS(j - 3) And Trim(Mid(Result, 4, 6)) = Serv(j - 3) And Trim(Mid(Result, 36, 2)) = RC(j - 3) Then
Exit Do
' If the initial If criteria renders ICN to not have been
' found, this will cause a range error. We want to resume
' on to the next process if such error occurs.
On Error Resume Next
ElseIf Trim(Mid(Result, 165, 10)) = ICN(k) And Trim(Mid(Result, 28, 10)) = Draft(k) Then
Exit Do
ElseIf Trim(Mid(Result, 165, 10)) = ICN(k - 1) And Trim(Mid(Result, 28, 10)) = Draft(k - 1) Then
Exit Do
On Error GoTo 0
Else
GoTo POSBlank
End If
End If
End If
End If
End If
在收到有关 SO 的人才的建议并进行更多研究后,我将我的代码更改为一个可行的解决方案。和原来的差别不大,但是更靠谱
If SMonth = EMonth Or SMonth <> EMonth And j > 1 And k > 1 Then
If ScreenName = "MHI" And EditWarnMsg = "E065NO MORE CLMS ON FILE," Then
' Attempt to refresh the connection list
' to get current data on the screen.
objConnMgr.autECLConnList.Refresh
Result = objUNET.auteclps.GetTextRect(SvcLn1, 1, SvcLn3, 80)
' See if we've already processed this place of service
If Left(Result, 2) = POS(j - 1) Or Left(Result, 2) = POS(j - 2) Or Left(Result, 2) = POS(j - 3) Then
' See if we've already processed this service code matching the POS
If Trim(Mid(Result, 4, 6)) = Serv(j - 1) Or Trim(Mid(Result, 4, 6)) = Serv(j - 2) Or Trim(Mid(Result, 4, 6)) = Serv(j - 3) Then
' See if we've already processed this remark code matching the POS and service code
If Trim(Mid(Result, 36, 2)) = RC(j - 1) Or Trim(Mid(Result, 36, 2)) = RC(j - 2) Or Trim(Mid(Result, 36, 2)) = RC(j - 3) Then
' If start month equals end month, stop the process
If SMonth = EMonth Then
Exit Do
Else
GoTo POSBlank ' Continue process by going to label
End If
End If
End If
' See if we've already processed this ICN
If Trim(Mid(Result, 165, 10)) = ICN(k - 1) Or Trim(Mid(Result, 165, 10)) = ICN(k - 2) Then
' See if we've already processed this draft number matching the ICN
If Trim(Mid(Result, 28, 10)) = Draft(k - 1) Or Trim(Mid(Result, 28, 10)) = Draft(k - 2) Then
If SMonth = EMonth Then
Exit Do
Else
GoTo POSBlank
End If
End If
End If
End If
End If
End If