Введите текст Excel в поля на экране эмулятора мейнфрейма HostExplorer.

Я работаю с эмулятором терминала мейнфрейма HostExplorer. Мои знания VBA основаны на объединении кусочков информации, которую я нашел в Интернете, для создания других макросов.

Я делаю макрос, чтобы ввести счет в мэйнфрейм, перемещаться между несколькими экранами, вводить информацию, которая будет генерировать ссылку, а затем использовать эту ссылку для сохранения файла в заранее определенную папку на моем компьютере.

Я застрял в части ввода информации. После перехода к последнему экрану мне нужно ввести текст в определенные поля мейнфрейма.

Я знаю, как определить местоположение на экране и использовать его для создания переменных.

Как я могу сделать обратное, ввести строку, хранящуюся в переменной (или просто случайную букву), в определенное место на экране?

Sub MiscFileDownload()

Dim HostExplorer As Object
Dim MyHost As Object
Dim Rc As Integer

On Error GoTo GenericErrorHandler

Set HostExplorer = CreateObject("HostExplorer") ' Initialize HostExplorer Object
Set MyHost = HostExplorer.HostFromProfile("*****") ' Set object for the desired session
If MyHost Is Nothing Then GoTo NoSession

Dim ColALastRow As Long
ColALastRow = Worksheets(1).Columns("A:A").End(xlDown).Row
Dim Pro As String
Dim MiscTest As String
Dim iPSUpdateTimeout

'enter pro then F2 and F9

For i = 2 To ColALastRow

    Pro = Worksheets(1).Cells(i, 1).Value
    Rc = MyHost.Keys(Pro)
    iPSUpdateTimeout = 60
    MyHost.RunCmd ("Enter")
    Rc = MyHost.WaitPSUpdated(iPSUpdateTimeout, True)

    If Rc <> 0 Then GoTo OnWaitPSUpdatedTimeout

    iPSUpdateTimeout = 60
    MyHost.RunCmd ("PF2")
    Rc = MyHost.WaitPSUpdated(iPSUpdateTimeout, True)

    If Rc <> 0 Then GoTo OnWaitPSUpdatedTimeout

    iPSUpdateTimeout = 60
    MyHost.RunCmd ("PF9")
    Rc = MyHost.WaitPSUpdated(iPSUpdateTimeout, True)

    If Rc <> 0 Then GoTo OnWaitPSUpdatedTimeout

    MiscTest = Mid(MyHost.Text, 1466, [3])        

    If MiscTest = "YES" Then 'test for Misc if true move to next screen
        Rc = MyHost.Keys("v")
        Rc = MyHost.WaitPSUpdated(iPSUpdateTimeout, True)

        If Rc <> 0 Then GoTo OnWaitPSUpdatedTimeout

        MyHost.RunCmd ("Tab")
        Rc = MyHost.WaitPSUpdated(iPSUpdateTimeout, True)

        If Rc <> 0 Then GoTo OnWaitPSUpdatedTimeout

        Rc = MyHost.Keys("v")
        Rc = MyHost.WaitPSUpdated(iPSUpdateTimeout, True)

        If Rc <> 0 Then GoTo OnWaitPSUpdatedTimeout

        MyHost.RunCmd ("Tab")
        Rc = MyHost.WaitPSUpdated(iPSUpdateTimeout, True)

        If Rc <> 0 Then GoTo OnWaitPSUpdatedTimeout

    Else

        MyHost.RunCmd ("PF1")
        Rc = MyHost.WaitPSUpdated(iPSUpdateTimeout, True)

        If Rc <> 0 Then GoTo OnWaitPSUpdatedTimeout

        MyHost.RunCmd ("PF1")
        Rc = MyHost.WaitPSUpdated(iPSUpdateTimeout, True)
        If Rc <> 0 Then GoTo OnWaitPSUpdatedTimeout

        GoTo NextIteration
    End If

NextIteration:
Next i

Exit Sub

person user2996913    schedule 20.01.2017    source источник
comment
Вы просто хотите ввести текст? Я не уверен, что такое ваш хост, но похоже, что вы можете вводить данные, используя метод key()!! Например: MyHost.Keys (значение, которое вы хотите ввести)   -  person Prageeth Saravanan    schedule 20.01.2017
comment
MyHost.Keys(thevalueyouwanttoType) работает для ввода строки, но мне нужно знать, как ввести ее в определенное место, если это имеет смысл? Например, MiscTest = Mid(MyHost.Text, 1466, [3]) установит эту переменную равной строке, начинающейся с местоположения? 1466 на моем hostexplorer. Как я могу перейти в определенное место перед использованием Myhost.keys?   -  person user2996913    schedule 20.01.2017
comment
vbcity.com/forums/t/42741.aspx это может помочь.   -  person Nathan_Sav    schedule 20.01.2017
comment
как и этот mimage.hummingbird.com/alt_content/binary/pdf /support/nc/ host.fields(x).text   -  person Nathan_Sav    schedule 20.01.2017


Ответы (2)


Учитывая, что вы записали приведенный выше код с помощью приложения Humming Bird:

Как только вы нашли позицию на своем экране, вы можете передать переменную конкретному _________________, например; myHost.area(4,2,4,10) - это позиция, в которую вы хотите что-то ввести,

MyHost.Area(4,2,4,10) = "desired_text"

Если вы хотите найти область в HostExplorer, перейдите к окну немедленного просмотра (нажмите ctrl+G), введите ?MyHost.area(7,2,7,70) и нажмите Enter => 2 — начальная позиция, а 70 — начальная позиция. конечное положение.

Вы получите текст или значения, представленные в 7-й строке от 2-го символа до 70-го символа.

person Anto Nathan    schedule 09.05.2017

В своем коде установите часы на myHost и проверьте приоритет .item.fields. Таким образом, вы узнаете номер элемента каждого поля. Затем вы можете ввести с помощью этого элемента.

У меня нет перед собой кода, но в качестве примера он выглядит примерно так: MyHost.fields.item(78)= yourVariable или «30s».

person MüdeFuchs    schedule 23.01.2018