ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1780|回复: 6

[分享] 开心工作,健康成长!真正实现用VBA操作任意软件!(非sendkeys)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-1-5 17:30 | 显示全部楼层 |阅读模式
本帖最后由 gxp1986 于 2020-1-5 19:43 编辑

公司要修改金碟里的基础数据,数量大概是5500+,不能批改,只能人工一个个修改.本来预计四台电脑2天完成,结果我只用了两个小时就完成. 01.png
用到的软件叫 "按键精灵".这个软件,它支持VBA!!
02.png

先上一段代码,让大家看一看,相信有VBA基础的朋友,应该都看得懂
  1. For i= 1 to 2000
  2.         If GetPixelColor(611,140) <> "A0A0A0" Then '如果下一条菜单可用
  3.                 MoveTo 611, 140'下一条
  4.                 LeftClick 1
  5.                 Delay 1000
  6.                 MoveTo 630, 215'[自定义]位置
  7.                 LeftClick 1
  8.                 Delay 500
  9.                 KeyDown "CTRL", 1'复制编码
  10.                 KeyPress "C", 1
  11.                 KeyUp "CTRL", 1
  12.                 Delay 500
  13.                 MoveTo 540, 755'切换到EXCEL表
  14.                 LeftClick 1
  15.                
  16.                 Do        '空循环,检测EXCEL是否展开
  17.                         Delay 100
  18.                         If GetPixelColor(440, 290)= "0000FF" Then
  19.                                 Exit Do
  20.                         End If        
  21.                 loop
  22.                 MoveTo 125, 385'复制到工作表
  23.                 LeftClick 1
  24.                 Delay 100
  25.                 KeyDown "CTRL", 1
  26.                 KeyPress "V", 1
  27.                 KeyUp "CTRL",1
  28.                 Delay 200
  29.                 MoveTo 1220, 390'复制存储位置
  30.                 LeftClick 1
  31.                 KeyDown "CTRL", 1
  32.                 KeyPress "C", 1
  33.                 KeyUp "CTRL", 1
  34.                 Delay 500
  35.                
  36.                 GetColor2 = GetPixelColor(320, 375)               
  37.                 'MsgBox GetColor2
  38.                 MoveTo 375, 755'切换回金碟物料界面
  39.                 LeftClick 1
  40.                 Delay 50
  41.                 MoveTo 690, 310
  42.                 LeftClick 1
  43.                 If GetColor2 = "0000FF" Then '如果编码异常,说明无存放记录,则清除金碟区域数据
  44.                         KeyPress "DELETE",1
  45.                 Else '否则把EXCEL里的存储位置,复制到金碟区域里                        
  46.                         KeyDown "CTRL", 1
  47.                         KeyPress "V", 1
  48.                         KeyUp "CTRL",1
  49.                 End If
  50.                 Delay 500               
  51.                 MoveTo 640, 295
  52.                 LeftClick 1
  53.                 Delay 10
  54.                 MoveTo 485, 150'保存
  55.                 LeftClick 1
  56.                 Delay 500
  57.                 'MsgBox GetPixelColor(851, 299)
  58.                 If GetPixelColor(851, 299) = "BDC4E6" Then
  59.                         KeyPress "Y",1
  60.                 End If
  61.                 Delay 1000
  62.         Else
  63.                 MsgBox "修改完成!"
  64.                 Exit For
  65.         End If
  66. 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 ,可以这么操作

  1. KeyDown "CTRL", 1             '按住CTRL
  2. KeyPress "V", 1                     '然后按一次V,完成粘贴
  3. 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"这种,就算是完成了

另一个重点是空循环,语句超简单,但是作用很大!
  1. Do        '空循环,检测EXCEL是否展开
  2.                         Delay 100
  3.                         If GetPixelColor(440, 290)= "0000FF" Then
  4.                                 Exit Do
  5.                         End If        
  6.                 loop
复制代码
有些语句执行了之后,被操作的软件需要反应时间,所以需要Delay n   等待N毫秒后再执行后面的语句.但如果N秒后,程序还没反应过来呢?我们后面的语句不是全乱套了?所以我用了个DO LOOP ,每隔100毫秒就判断一次它是否已经回过魂来了,如果回魂了,就EXIT DO,执行后面的语句.
每个软件反应过来后都有自己的特点,比如说这个软件反应过来后,这个按键从原来的灰色不可用,就成了黑色可用状态;那个地方原来是红色的,反应过来后就变成其它颜色了等等,这个就要靠大家去发现了

经验总结:

一.写代码前,先把所有的目标点,或者有色值判断需求的点的RGB值都抄下来
二.写代码时,软件有智能提示,尽量多用.遇到问题时,随时百度 "按键精灵  问题"

三.写完后,按下CTRL+S先保存,如果代码有错,软件会在中下方提示你哪里错了
四.调试阶段,Delay值尽量开久一点,好观察脚本是否符合我们愿意,确认没问题后,再按需要减少Delay值
五.启动热键不要和被操作软件有冲突,可能会有意外情况出现
六.如果你懒得上网站去转换RGB颜色值,可以新建一个脚本,直接就来一句 msgbox GetPixelColor(851, 299) ,运行后直接弹出它的16进制值!


以上简陋分享,希望对大家有帮助,谢谢


TA的精华主题

TA的得分主题

发表于 2020-1-5 21:59 | 显示全部楼层
按键精灵么........

TA的精华主题

TA的得分主题

发表于 2020-1-5 22:02 | 显示全部楼层
这也叫分享?我看看,多少人支持。如果也算,下次我也发点图片

TA的精华主题

TA的得分主题

发表于 2020-1-6 01:03 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-1-6 07:48 | 显示全部楼层
thzss 发表于 2020-1-5 22:02
这也叫分享?我看看,多少人支持。如果也算,下次我也发点图片

觉得有用的,告诉别人可以这么用,这么做,这就叫分享,再说我也没要你花一分钱,不用这么喷吧?别人没发出来之前,你都知道吗?你上这里的目的是什么?

TA的精华主题

TA的得分主题

发表于 2023-4-28 16:37 | 显示全部楼层
gxp1986 发表于 2020-1-6 07:48
觉得有用的,告诉别人可以这么用,这么做,这就叫分享,再说我也没要你花一分钱,不用这么喷吧?别人没发出来之 ...

感谢分享。建议能再详细一些,让我们这些小白可以更好的理解。

TA的精华主题

TA的得分主题

发表于 2023-4-28 19:17 | 显示全部楼层
不错。先收藏备用,按键精灵还没用过
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 05:27 , Processed in 0.037121 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表