У меня все работает, хотя метод все еще довольно схематичен. Я собрал воедино скрипт из кусочков кода, в основном благодаря комментарию Тима Уильямса. Программа действительно является версией Attachmate 2014, так что ресурс с его различными руководствами был очень полезен.
Короче, мое решение таково:
Private Sub CommandButton1_Click()
Dim app As Attachmate_Reflection_Objects_Framework.ApplicationObject
Dim frame As Attachmate_Reflection_Objects.frame
Dim terminal As Attachmate_Reflection_Objects_Emulation_IbmHosts.IbmTerminal
Dim view As Attachmate_Reflection_Objects.view
Dim screen As Attachmate_Reflection_Objects_Emulation_IbmHosts.IbmScreen
Dim cellData As String, w As String, x As String, y As String, z As String
Dim rCode As ReturnCode
Dim row As Integer
row = 3
Initialization stuff
Do
'Get the data from Excel
w = Worksheets("Calculator").Cells(row, 4).Value
x = Worksheets("Calculator").Cells(row, 5).Value
y = Worksheets("Calculator").Cells(row, 6).Value
z = Worksheets("Calculator").Cells(row, 7).Value
'Put the data into the appropriate fields
rCode = screen.PutText2(w, 22, 21)
rCode = screen.PutText2(x, 22, 47)
rCode = screen.PutText2(y, 22, 75)
rCode = screen.PutText2(z, 23, 20)
'Navigate and copy from the screens
rCode = screen.SendControlKey(ControlKeyCode_Transmit)
rCode = screen.WaitForText1(200, "4", 22, 4, TextComparisonOption_RegularExpression)
screen.SelectAll
screen.Copy
rCode = screen.WaitForHostSettle(30, 100)
rCode = screen.SendControlKeySync(ControlKeyCode_F3)
'Increment the counter to the next row
row = row + 1
'Paste into worksheet
With Worksheets("Data")
Range("A1").Select
.Paste
End With
Loop While Worksheets("Face").Range("D7").Value = "Searching..."
End Sub
И оттуда Excel использует базовое выражение IF, чтобы посмотреть на вставленный текст и определить, содержится ли в нем поисковый термин. Он проходит через ~ 40 экранов в минуту, что сравнимо или немного медленнее, чем у человека, но в течение длительного периода времени он определенно быстрее и легко более точен.
Мой следующий шаг - перестроить его там, где он очищает текстовые поля и сравнивает его с самим поисковым термином, а не со всей бессмысленной копией, которая составляет большую часть времени в цикле.
РЕДАКТИРОВАТЬ: Несколько недель спустя ...
Я сделал несколько оптимизаций, используя другую очень полезную функцию vba из библиотеки attachmate, ".gettext (row, column, length)", а не копировал и вставлял, сравнивая "gettext" (сохраненный в виде строки) с поисковым термином. (также хранится в виде строки из таблицы Excel). Однако это не оказало заметного влияния на скорость поиска. Я также добавил к нему некоторую логику, которая определяет, находится ли он на пустом экране (с использованием .gettext), и переходит на следующий непустой экран (адрес следующего непустого экрана отображается на всех пустых экранах, поэтому простой вопрос чтения и интерпретации этого условия). В общем, он делает свою работу, и мои коллеги (никто из нас не занимается ИТ и не имеют знаний о кодировании) весьма впечатлены. Следующим шагом будет очистка и обналичивание экранной информации в псевдо-базе данных, которую я создам для зеркалирования действующей базы данных, которую я могу легко сохранить в листе Excel и использовать вместо нее ctrl + f для поиска и, возможно, установить ее для обновления. Сам может быть раз в неделю или раз в месяц (поскольку база данных редко обновляется). Все это потому, что у нас нет процедуры для совместного доступа к базе данных, и никто не заботится о том, чтобы разработать ее.