在IBM Reflection主机中,我试图运行一个VBA宏,用于遍历不同的屏幕并填充所需的信息(在预定义的模板类型的屏幕中),以在系统中创建订单。
在这个过程中,我试图利用功能-"会话。"移动光标"one_answers"会话"。CursorRow"、"会话。CursorColumn",用于将光标移动到所需位置,然后读取光标位置信息(在HOST屏幕上写入数据之前验证位置)
代码:
Dim currRowPos as Integer
Dim currColPos as Integer
Session.MoveCursor targetRowPos, targetColPos ' move cursor position
DoEvents ' custom logic to wait or inlcude delay 1 sec or more, mentioned only single code statement here
currRowPos = Session.CursorRow 'get cursor current row position
currColPos = Session.CursorColumn 'get cursor current column position
'check current cursor position and write data onto HOST screen
If targetRowPos = currRowPos And targetColPos = currColPos Then
Session.TransmitANSI "xyz" 'write xyz on HOST screen
End If
我正试图在所需的光标位置向主机写入一些信息,并遍历到下一个屏幕。在适当的过程中,我将来回地为多个项目填写信息(一次一个)。
有时我面临一个问题,其中上述逻辑(代码)执行,光标仍在旧位置(不在所需的新行,列位置),程序开始在旧位置写入数据,而不是所需的/目标位置,导致编程错误(即。的会话。CursorRow'和'Session '。CursorColumn'正在输出新的所需光标位置,而此时光标在HOST屏幕上的旧位置)。
如果有人以前遇到过这个问题和/或有任何解决方案,请分享给我们。谢谢你。
从下面的注释粘贴代码
这里是vba程序中使用的延迟函数-代码
Public Sub DelayScript(Seconds As Integer)
Dim PauseTime, START
PauseTime = Seconds
START = Timer ' Set start time.
Do While Timer < START + PauseTime
DoEvents ' Yield to other processes.
Loop
End Sub
IBM HOST Programming Reference: http://docs.attachmate.com/reflection/14.x/prog-ref/ibm/
如果我正确理解了您的问题,那么底层连接中的延迟会干扰代码的时序。一般来说,您应该使用Wait*
方法而不是DoEvents
或计时代码,并让Reflection为您处理计时。我的猜测是,您需要更像这样的东西:
With Session
.MoveCursor targetRowPos, targetColPos
'10 second timeout.
.WaitForEvent rcEnterPos, "10", "", targetRowPos, targetColPos
'Verify that you didn't time out.
If targetRowPos = .CursorRow And targetColPos = .CursorColumn Then
Session.TransmitANSI "xyz" 'write xyz on HOST screen
End If
End With
或者(假设它是一个字段)你等待rcEnterField
而不是rcEnterPos
。