首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >For Each for Emulation内的VBA If语句

For Each for Emulation内的VBA If语句
EN

Stack Overflow用户
提问于 2019-11-21 00:16:42
回答 1查看 334关注 0票数 0

我需要在BlueZone中更新几千个X坐标。我正在使用VBA在BlueZone VT中输入关键命令。不幸的是,没有“设置光标位置”命令,所以我只能使用“制表符”将光标放在它需要去的地方。

在坐标更新屏幕上有两种可能:6个或7个选项卡,取决于屏幕上是否存在0。

例如:位置241054有一个1,需要7个制表符,位置241051有一个0,需要6个制表符才能到达X位置字段,以便我将其转储到我的变量中。

下面是我的代码:

代码语言:javascript
复制
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条件。

EN

回答 1

Stack Overflow用户

发布于 2019-11-26 01:09:56

下面的代码可以正常工作。

单元格D3 =mid(J7,63,1)和单元格D8 =D3*1

我还做了@donpablo建议的缩进(参见评论)。

代码语言:javascript
复制
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 Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58958879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档