我需要在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是否为0。但是,我不能让if - then语句工作。
这段代码只运行了6个选项卡,这告诉我要么是mid()语句无法识别res_check值(这是一个用于将值从屏幕上拉出的语句),要么是变量没有随着循环更新。但是,如果我首先运行res_check >0位置,它仍然有6个选项卡,所以我可以排除这种可能性。
作为进一步的检查,我对res_check值运行了TRUE FALSE检查,当变暗为整数时,它通过了检查。然而,在工作表上,ISNUMBER()失败了。
TLDR: If Then将不会产生所需的结果-代码保持缺省值为Else条件。


发布于 2019-11-26 01:09:56
下面的代码可以正常工作。
单元格D3 =mid(J7,63,1)和单元格D8 =D3*1
我还做了@donpablo建议的缩进(参见评论)。
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
myRange = ActiveSheet.Range("A2:A1000")
myX = ActiveSheet.Range("E1").Value
res_check = ActiveSheet.Range("D8").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
'Modify data
bzhao.SendKey "M"
bzhao.Wait 0.2
bzhao.SendKey "<tab><tab><tab><tab><tab>" 'tab to Res
'Decide 6 or 7 tabs
If ActiveSheet.Range("D8").Value > 0 Then
bzhao.Wait 0.1
bzhao.SendKey "<tab>"
Else
End If
bzhao.Wait 0.1
bzhao.SendKey "<tab>"
bzhao.Wait 0.1
bzhao.SendKey myX
bzhao.Wait 0.1
bzhao.SendKey "<enter>"
bzhao.Wait 0.1
bzhao.SendKey "E"
bzhao.Wait 0.5
Next myLoc
End Subhttps://stackoverflow.com/questions/58958879
复制相似问题