【发布时间】:2019-11-20 16:16:42
【问题描述】:
我需要更新 BlueZone 中的数千个 X 坐标。我正在使用 VBA 在 BlueZone VT 中输入键盘命令。不幸的是,没有“设置光标位置”命令,所以我仅限于使用“标签”将光标放在需要去的地方。
在坐标更新屏幕有两种可能性:6 或 7 个选项卡,具体取决于屏幕上是否存在 0。
例如:位置 241054 有一个 1 并且需要 7 个选项卡,位置 241051 有一个 0 并且需要 6 个选项卡才能到达 X 位置字段,以便我转储到我的变量中。
这是我的代码:
Sub FiXCoord_Loop()
'Must start at IMLOA screen
Dim bzhao As Object
Set bzhao = CreateObject("BZWhll.WhllObj")
bzhao.Connect ""
Dim myX As Integer
Dim res_check As Integer
Dim myLoc As Variant
'Dim res_check As Variant
myRange = ActiveSheet.Range("A2:A1000")
'myResRange = ActiveSheet.Range("D3")
myX = ActiveSheet.Range("E1").Value
res_check = ActiveSheet.Range("D3").Value
For Each myLoc In myRange
'end loop at blank cell
If myLoc = "" Then
Exit For
End If
'Query location
bzhao.SendKey "Q"
bzhao.Wait 0.2
bzhao.SendKey myLoc
bzhao.Wait 0.2
bzhao.SendKey "<enter>"
bzhao.Wait 0.2
'Copy screen to get res#
bzhao.Wait 1
bzhao.Copy 32
bzhao.Wait 1
'Paste info to sheet for res_check
Range("J1").Select
ActiveSheet.Paste
bzhao.SendKey "M"
bzhao.Wait 0.2
bzhao.SendKey "<tab>"
bzhao.Wait 0.2
bzhao.SendKey "<tab>"
bzhao.Wait 0.2
bzhao.SendKey "<tab>"
bzhao.Wait 0.2
bzhao.SendKey "<tab>"
bzhao.Wait 0.2
bzhao.SendKey "<tab>"
'if value > 0 extra tab
If res_check > 0 Then
bzhao.SendKey "<tab>"
bzhao.Wait 1
bzhao.SendKey "<tab>"
bzhao.Wait 1
bzhao.SendKey myX
bzhao.Wait 0.2
bzhao.SendKey "<enter>"
bzhao.Wait 0.2
bzhao.SendKey "E"
bzhao.Wait 0.5
Else
bzhao.Wait 0.2
bzhao.SendKey "<tab>"
bzhao.Wait 1
bzhao.SendKey myX
bzhao.Wait 0.2
bzhao.SendKey "<enter>"
bzhao.Wait 0.2
bzhao.SendKey "E"
bzhao.Wait 0.5
End If
Next myLoc
End Sub
由于我仅限于通过键盘命令在屏幕上行走,因此我正在复制屏幕并将其粘贴到我的工作表上以检查是否为 0。但是,我无法使 if - then 语句起作用。
代码只是在 6 个选项卡上继续运行,这告诉我 res_check 值(这是一个将值从屏幕上拉出的 mid() 语句)未被识别,或者变量没有更新环形。但是,如果我先运行 res_check > 0 位置,它仍然会执行 6 个选项卡,因此我可以消除这种可能性。
作为进一步的检查,我对 res_check 值进行了 TRUE FALSE 检查,当它作为整数变暗时通过了。但是,在工作表上,ISNUMBER() 失败了。
【问题讨论】:
-
请尝试 bzhao.SetCursor 6, 53 bzhao.SendKey "qwrety@E" bzhao.WaitReady 10, 1 的变体
-
嗨,Don,我已尝试使用 SetCursor 并与 BlueZone 帮助台交谈。它不是 VT 中支持的命令。
-
@donPablo ^以上
-
当 res_check > 0 时,第 5 和第 6 个选项卡之间没有 Wait 语句。当 res_check 不 > 0 时,第 5 和第 6 个选项卡之间有 Wait 语句。哪种行为是正确的?
-
@barrowc 等待时间设置得非常慷慨,以便在运行时监控宏。它只是暂停 1 秒(或任何设置)。我相信这对问题没有影响。
标签: excel vba if-statement emulation bluezone