VBA обнаружение цвета текста IBM PCOMM

Недавно мой IBM PCOMM был обновлен на моей работе до версии 12.0.0.1. С тех пор, если я пытаюсь обнаружить пустое пространство, и что-то уже было там ранее, этот текст будет отображаться, когда я использую 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

1 ответ

Решение

Получив совет от талантливых людей по 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
Другие вопросы по тегам