vbaibm-pcomm

VBA detecting text color IBM PCOMM


Recently, my IBM PCOMM had been upgraded at my job to version 12.0.0.1. Ever since, if I'm trying to detect blank space, and something was already there previously, that text will show up when I use autECLPS.GetText even though all I see is black. I need a way to see if there is hidden text so I know I can go onto the next procedure. I've been using autECLPS.GetTextRect to see if I can match entire blocks of text, but that's becoming tedious. Any suggestions?

UPDATED

Here's what I have so far:

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

Solution

  • After receiving advice from the talented people on SO, and doing a bit more research, I've changed my code to a solution that works. It's not much different from the original, but it's more reliable.

    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