|
本帖最后由 gxp1986 于 2020-1-5 19:43 编辑
公司要修改金碟里的基础数据,数量大概是5500+,不能批改,只能人工一个个修改.本来预计四台电脑2天完成,结果我只用了两个小时就完成.
用到的软件叫 "按键精灵".这个软件,它支持VBA!!
先上一段代码,让大家看一看,相信有VBA基础的朋友,应该都看得懂
- For i= 1 to 2000
- If GetPixelColor(611,140) <> "A0A0A0" Then '如果下一条菜单可用
- MoveTo 611, 140'下一条
- LeftClick 1
- Delay 1000
- MoveTo 630, 215'[自定义]位置
- LeftClick 1
- Delay 500
- KeyDown "CTRL", 1'复制编码
- KeyPress "C", 1
- KeyUp "CTRL", 1
- Delay 500
- MoveTo 540, 755'切换到EXCEL表
- LeftClick 1
-
- Do '空循环,检测EXCEL是否展开
- Delay 100
- If GetPixelColor(440, 290)= "0000FF" Then
- Exit Do
- End If
- loop
- MoveTo 125, 385'复制到工作表
- LeftClick 1
- Delay 100
- KeyDown "CTRL", 1
- KeyPress "V", 1
- KeyUp "CTRL",1
- Delay 200
- MoveTo 1220, 390'复制存储位置
- LeftClick 1
- KeyDown "CTRL", 1
- KeyPress "C", 1
- KeyUp "CTRL", 1
- Delay 500
-
- GetColor2 = GetPixelColor(320, 375)
- 'MsgBox GetColor2
- MoveTo 375, 755'切换回金碟物料界面
- LeftClick 1
- Delay 50
- MoveTo 690, 310
- LeftClick 1
- If GetColor2 = "0000FF" Then '如果编码异常,说明无存放记录,则清除金碟区域数据
- KeyPress "DELETE",1
- Else '否则把EXCEL里的存储位置,复制到金碟区域里
- KeyDown "CTRL", 1
- KeyPress "V", 1
- KeyUp "CTRL",1
- End If
- Delay 500
- MoveTo 640, 295
- LeftClick 1
- Delay 10
- MoveTo 485, 150'保存
- LeftClick 1
- Delay 500
- 'MsgBox GetPixelColor(851, 299)
- If GetPixelColor(851, 299) = "BDC4E6" Then
- KeyPress "Y",1
- End If
- Delay 1000
- Else
- MsgBox "修改完成!"
- Exit For
- End If
- next
复制代码 for循环,DO循环还有IF,MSGBOX就不说,这是基本词句,
MoveTO X,Y 鼠标移动到指定坐标
LeftClick n 单击鼠标左键n次
Delay x 延迟X毫秒,然后再执行后面的代码
KeyDown "C",1 按住"C"键,操作1次
KeyUp "C",1 放开"C"键,操作1次
KeyPress "C",1 按下然后放开"C"键,操作1次,相当于操作了一次KeyDown和KeyUp.
备注:
一,如果你要按其它键,直接按照键盘抄就行了.
二.如果你需要输出一段文本,请用sayString "我是一段文本" ,文本可以用变量替代,然后怎么操作这个变量,就看你喜欢了
三.如果你想要输出组合键CTRL + V ,可以这么操作
- KeyDown "CTRL", 1 '按住CTRL
- KeyPress "V", 1 '然后按一次V,完成粘贴
- KeyUp "CTRL",1 '松开CTRL键,完成
复制代码 重点说一下这句: If GetPixelColor(851, 299) = "BDC4E6" Then... 解释为: 当坐标点(851,299)的颜色值为 "BDC4E6" 时,条件成立.前面的语句GetPixelColor(X,Y)是固定格式,不多说,我们重点说一下怎么获得这个坐标值和颜色值:
一.启用QQ或者微信截图功能
二.把鼠标移动到最左上角,即(0,0)的位置
三.向右下拉,拉到你需要的位置.
此时截图功能会显示出所划区域的尺寸为:XX*YY,这个(XX,YY)就是我们需要的坐标.同时截图功能还会告诉你,坐标点(XX,YY)的RGB值,格式像(255,0,0)这种,抄下来,然后百度 "RGB转16进制",有在线工具可以免费转换,转换后得到一个6位长度的字母组合,类似于"BDC4E6"这种,就算是完成了
另一个重点是空循环,语句超简单,但是作用很大!
- Do '空循环,检测EXCEL是否展开
- Delay 100
- If GetPixelColor(440, 290)= "0000FF" Then
- Exit Do
- End If
- loop
复制代码 有些语句执行了之后,被操作的软件需要反应时间,所以需要Delay n 等待N毫秒后再执行后面的语句.但如果N秒后,程序还没反应过来呢?我们后面的语句不是全乱套了?所以我用了个DO LOOP ,每隔100毫秒就判断一次它是否已经回过魂来了,如果回魂了,就EXIT DO,执行后面的语句.
每个软件反应过来后都有自己的特点,比如说这个软件反应过来后,这个按键从原来的灰色不可用,就成了黑色可用状态;那个地方原来是红色的,反应过来后就变成其它颜色了等等,这个就要靠大家去发现了
经验总结:
一.写代码前,先把所有的目标点,或者有色值判断需求的点的RGB值都抄下来
二.写代码时,软件有智能提示,尽量多用.遇到问题时,随时百度 "按键精灵 问题"
三.写完后,按下CTRL+S先保存,如果代码有错,软件会在中下方提示你哪里错了
四.调试阶段,Delay值尽量开久一点,好观察脚本是否符合我们愿意,确认没问题后,再按需要减少Delay值
五.启动热键不要和被操作软件有冲突,可能会有意外情况出现
六.如果你懒得上网站去转换RGB颜色值,可以新建一个脚本,直接就来一句 msgbox GetPixelColor(851, 299) ,运行后直接弹出它的16进制值!
以上简陋分享,希望对大家有帮助,谢谢
|
|