VBA制作简单的按键精灵
时间:2022-07-22
本文章向大家介绍VBA制作简单的按键精灵,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1、需求:
将Excel里的数据,输入到其他软件。
2、举例:
还是接着上前面的例子,公司突然要用系统来管理人员信息了,但是由于开发时间过于仓促,竟然没有从Excel导入的功能(好像挺说不通啊!)。你需要把统计好的10几万数据一个一个的输入到系统里(估计真有这种事的话你要辞职了)!
但是我工作中真有类似的例子,估计是单位财务系统的版本太旧,又或者是没人去研究系统,同事做凭证都是手敲进去的。平时一些小的报销凭证还好,可是有些工资、成本的相关的凭证,一个凭证分录有的多达几百条,他们都是靠手敲的!
3、代码实现
Excel VBA作为一种编程语言,虽然不适合开发什么大型的软件系统,但是从理论讲,还是可以实现任何语言能实现的功能的,所以在VBA里也没什么是不可能的。这种简单的按键精灵在VBA里很容易,甚至不用调用API,VBA已经帮我们封装好了功能,那就是SendKeys。
只要我们正确找准每一行的数据输入的步骤,加上合适的等待时间保证电脑不会因为卡顿影响,就能够顺利的完成数据的输入。
我们按照前面例子的数据,假设每一行数据输入的时候,输完1个单元格的内容就按一次Table键,在一行数据的最后输入Enter键到下一行,我这里就直接用1个txt文档演示:
Enum RetCode
ErrRT = -1
SuccRT = 1
End Enum
Enum Pos
RowStart = 2
KeyCol = 2
Cols = 6
End Enum
Type DataStruct
Src() As Variant
Rows As Long
Cols As Long
End Type
Sub vba_main()
Dim d As DataStruct
If RetCode.ErrRT = ReadSrc(d) Then Exit Sub
'如果找不准其他系统的窗口名称,这一句可以省略,把MySleep时间加大一些,这样可以点运行程序后,用鼠标点击去激活窗口
VBA.AppActivate "好高级的系统.txt - 记事本"
MySleep 1
If RetCode.ErrRT = GetResult(d) Then Exit Sub
End Sub
Private Function GetResult(d As DataStruct) As RetCode
Dim i As Long, j As Long
For i = Pos.RowStart To d.Rows
For j = 1 To Pos.Cols
VBA.SendKeys VBA.CStr(d.Src(i, j)), True
If j = Pos.Cols Then
VBA.SendKeys "{ENTER}"
Else
VBA.SendKeys "{TAB}"
End If
'这个等待时间看自己电脑情况来调节,电脑不好就时间大一些,让电脑有足够的时间反应
MySleep 0.5
Next j
Next
End Function
Private Function ReadSrc(d As DataStruct) As RetCode
ReadSrc = ReadData(d.Src, d.Rows, Pos.Cols, Pos.KeyCol, Pos.RowStart)
End Function
Private Function ReadData(ByRef RetArr() As Variant, ByRef RetRow As Long, Cols As Long, KeyCol As Long, RowStart As Long) As RetCode
ActiveSheet.AutoFilterMode = False
RetRow = Cells(Cells.Rows.Count, KeyCol).End(xlUp).Row
If RetRow < RowStart Then
MsgBox "没有数据"
ReadData = RetCode.ErrRT
Exit Function
End If
RetArr = Cells(1, 1).Resize(RetRow, Cols).Value
ReadData = RetCode.SuccRT
End Function
Function MySleep(Interval As Double) As RetCode
Dim t As Double
t = VBA.Timer()
Do Until VBA.Timer() - t > Interval
VBA.DoEvents
Loop
End Function
程序是比较简单的,只要自己多试试,控制好MySleep的时间就好,程序运行的过程不要去操作鼠标和键盘。
另外:
- 输入法会对输入的内容有影响,最好调成英文状态
- 如果确实数据太多了,可以分开多次来输入
- 一些特殊字符或者功能键需要放在“{}”内,具体请查看SendKeys的帮助文件
- python装饰器大详解
- spring boot 登录注册 demo (四) -- 体验小结
- jenkins 时区设置
- 什么样的密码才是安全的?
- MAC本遭遇ARP攻击的处理办法
- nodejs 语法学习(持续更新)
- Django——模板层(template)(模板语法、自定义模板过滤器及标签、模板继承)
- - Templates should only be responsible for mapping the state to the UI. Avoid placing tags with side
- Django - - - -视图层之视图函数(views)
- fiddler mock ==> AutoResponder
- 基于Node.js开发跨平台窗口程序
- Django视图层之路由配置系统(urls)
- java String时间转为时间戳
- linux 简易启动脚本
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP设计模式之外观模式(Facade)入门与应用详解
- PHP实现简单用户登录界面
- 使用python批量修改XML文件中图像的depth值
- PHP数组对象与Json转换操作实例分析
- PHP防止sql注入小技巧之sql预处理原理与实现方法分析
- php实现微信公众号企业转账功能
- 实例分析10个PHP常见安全问题
- laravel清除视图缓存的代码
- Smarty模板类内部原理实例分析
- laravel框架与其他框架的详细对比
- ThinkPHP like模糊查询,like多匹配查询,between查询,in查询,一般查询书写办法
- PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
- PHP实现简单登录界面
- PHP创建XML接口示例
- PHP设计模式之单例模式入门与应用详解