Attachmate接收主机字符串并使用VBA对条件响应做出反应

时间:2012-11-02 06:11:54

标签: vba readline

使用Attachmate,我正在尝试编写一个VBA脚本,该脚本在特定短语发生时作出反应并通过内联命令自动执行命令。基本上,当出现一个短语时,会出现一个输入框,要求用户输入特定数量,VBA代码将获取该数量,将其插入终端,然后跳转到不同的菜单以创建内部标签。但是,我的问题是我不知道如何让VBA代码对主机可能返回的不同字符串做出反应。有时它会说“继续”,有时会说“选择用户”。所以我想要它做的是基于它接收的语句来做某个动作,但是我不知道该命令用于捕获终端从主机接收的内容。我试过“waitforstring”和“readline”,但显然我没有正确使用它们。下面是我到目前为止建立的代码,请保持温和,因为它仍然是非常未完成的。为了解决我的问题,我已经注释了它的几个部分:

'variable declarations
Dim count As Long 'var used to indicate how many times code should loop (how many labels should be print)
Dim drugname As String
Dim qtyinput As Long
Dim CR As String    ' Chr(rcCR) = Chr(13) = Control-M
Dim LF As String    ' Chr(rcLF) = Chr(10) = Control-J
Dim strcheck As String

'assign values to variables
count = 0
CR = Chr(Reflection2.ControlCodes.rcCR)
LF = Chr(Reflection2.ControlCodes.rcLF)

qtyinput = InputBox("Number of items being sent", Quantity)
drugname = .GetText(22, 15, 22, 46) ' StartRow:=22, StartColumn:=15,EndRow:=22,   EndColumn:=46 'copies text from screen
    ' Press EditCopy (Copy the selection and put it on the Clipboard).
    '.Copy rcSelection, rcAsPlainText -- not needed
.Transmit qtyinput & CR
.Transmit CR
'strcheck = .readline("00:00:01")
'MsgBox strcheck
'If .WaitForString("Press " & Chr(34) & "RETURN" & Chr(34) & " to continue, " & Chr(34) & "^" & Chr(34) & " to stop: ") Then .Transmit CR

'Select Case strcheck
'    Case strcheck Like "to continue"
'        .Transmit CR
    'Case strcheck Like "*Select CLIENT*"
    '    .Transmit CR
'End Select

.Transmit "^MED" & CR
.Transmit "3" & CR
.Transmit "10" & CR

1 个答案:

答案 0 :(得分:0)

首先,Attachmate是公司,他们有一些产品可以从Windows访问大型机会话,包括EXTRA!和Reflections,它们共享一种通用的脚本语言,在VBA中很好用且易于使用。

但是,EXTRA!使用的命令往往比Reflection更少,这是更昂贵的产品,所以你必须使用你的VBA获得一些创意。

我认为您正在使用EXTRA!,因此您要查找的命令是“GetString”

我使用VBA与EXTRA!中的大型机会话进行交互,我知道当屏幕上出现三颗星在某个位置时我的主机命令成功。

主机命令可能需要1秒到5分钟才能完成,因此我每隔秒使用“GetString”轮询主机会话,等待三星继续:

Do Until Sess0.Screen.GetString(14, 2, 3) = "***"
    Application.Wait (Now + TimeValue("0:00:01"))
Loop

“GetString”的语法是:GetString(Row,Column,Length)

在我的情况下,星星出现在第14行第2列,我知道总会有3个,所以我将字符串长度设置为3。