VBS办公自动化探索与应用

2022-07-23 06:36中国电子科技集团公司第二十九研究所罗小平
电子世界 2022年1期
关键词:语句代码程序

中国电子科技集团公司第二十九研究所 罗 刚 罗小平 薛 磊

日常生活、工作、学习中,计算机操作很简单,但在操作过程中,很多事情在流程上都具有重复性。也许你每天启动计算机第一件事都是登陆某个网站,打开常用的办公软件,也许需要对文件进行大量的重命名、复制、粘贴、删除、数据处理等操作,重复、琐碎,让人容易产生疲劳,甚至出错。

有没有一种简单易学的编程语言,能代替人工实现自动化操作呢?VBS是一款非常适合的工具。

1 基础知识

VBS是VBScript的简写,不同于其他高级语言,它是基于Visual Basic的脚本语言。不需要先去学习系统架构,复杂的语法、命令、算法等,用VBS编写的代码简单、易学、高效,也不用编译转换成exe,源代码可直接由Windows系统执行,大部分高级语言能处理的,VBS基本都具备。VBS编辑工具为文本编辑器,最常见的就是记事本,编辑好后保存为*.vbs的文件,双击即可运行。

1.1 变量

用Dim来声明变量,类型不需要声明,对变量、函数、方法、对象的引用是也不区分大小写的。需要注意的是,不允许在声明变量的同时给变量赋值,多个变量用逗号隔开,注释用分号标注,VBS中所有符号只能是英文符号。用Const定义常量,需在定义时赋值。如:

Dim a,b ‘定义变量a和b

Const c=10 ‘定义常量c,值为10

1.2 输入函数

Inputbox,运行后弹出带提示且可输入内容的对话框,返回值将传递给函数或变量。如:

a=Inputbox(“提示”) ‘引号内为提示消息

1.3 输出函数

Msgbox,以对话框形式观察输出结果。如:

Msgbox a ‘显示a的值

1.4 条件判断语句

VBS中条件判断语句有If和Case两种。

If判断语格式为If…Then…End If,若需对多个条件进行判断,使用Else If … Then。If和Else If需要分别对应一个End If结尾。但有两个及以上的Else If时,只需要一个End If结尾。

Case判断语句:针对有很多种不同的判断情况,Case比If语句更简单方便。格式为Select Case变量名…Case 值…End Select

1.5 循环控制语句

无限循环语句,Do…loop。

条件循环,Do While…Loop,条件为true的时候执行循环体,需要跳出循环用Exit do。与while相反的是until。

计数循环,For i=n to m…Next,这是一种基于计数的循环,是最常见的循环结构,经常用来做单循环和嵌套循环。每一个for需要对应一个next结尾。

2 高级运用

掌握了VBS基本知识后,我们可以进一步运用,编辑一些自动化脚本,如自动运行软件、打开网页、模拟键盘输入,定时操作等,减少人工操作,为我们带来便利。

2.1 执行程序

VBS强大之处在于简单的指令完成复杂操作。只需两行简洁的代码便可启动外部程序,如运行一个记事本程序:

Set abc=CreateObject(“Wscript.shell”)

abc.Run”notepad”

Set是VBS指令,用于将对象引用赋给某个变量,abc是变量,abc.Run调用的就是Wscript.shell中的Run函数。值得注意的是,一般在程序结束前需要释放变量所占内存空间,如:Set abc=nothing。Notepad可替换成其他程序的绝对路径,如abc.Run”D:QQQQ.exe”,也可以是网址或IP地址,如abc.Run”http://www.baidu.com”,多个任务需分行输入指令,可一键打开所有需要用到的程序和网页。

2.2 模拟键盘操作

Sendkeys:模拟键盘操作指令,妙用该指令简化重复操作,可以向当前最前端窗口发送指令或字符串。如:

Set abc=CreateObject(“Wscript.shell”)

abc.Run”notepad”

Wscript.sleep 1000‘等待1000ms

abc.Sendkeys”123”‘往打开的记事本填入123

Sendkeys引号内的字符是分为基本键和特殊功能键,基本键按字符顺序排列在一起即可,特殊功能键Shift用+、Ctrl用^、Alt用%代替。

2.3 错误处理

编程难免会遇到错误,VBS中提供了一条On error resume next的语句,意思是在该语句后的代码运行出错时,程序忽略当前语句或返回值错误并继续执行。若在某一段代码后又想恢复,则使用语句On error goto 0,意思是在该语句后的代码运行出错时,程序会停止运行并弹出错误提示框。

2.4 时间函数

获取系统时间的函数为date和time,直接赋给变量即可。Date获取当前年月日,time获取当前时分秒。由于系统时间有很多种格式,编程时需要统一格式,那就用时间转换函数Cdate,该函数可以根据电脑系统设置,把预设时间转换成当前系统的格式,防止因格式不同而出错。若系统时间格式为2000年1月1日,a=”2000/1/1” ‘若时间代码写为2000/1/1。

b=Cdate(a) ‘将时间格式转换成系统格式

msgbox b

通过换转后变量b的值为2000年1月1日。

2.5 时间比较函数

我们的操作基本上都是基于时域进行的,以时间为基准,设计各种执行方案,在编程时,那就需要用到时间比较函数,根据当前时间是否到达预定时间来做判断,时间比较函数为datediff,格式为变量=datediff("格式",时间1,时间2),意思是以一定的格式表示时间2减时间1的差值,格式可以是年月日时分秒周等,使用时非常方便。如:

d=datediff(“n”,a,c) ‘比较预设时间和当前系统时间的差值,并以分钟表示,n代表分钟

msgbox d ‘显示预设时间与系统时间的差

2.6 批量修改文件名

日常工作中,经常会遇到要修改几十上百个,甚至更多文件的文件名,而这些文件名中又含有相同字符,若依次去重命名每一个文件,那将面临巨大的工作量,而且是重复操作,会耗费大量的时间。下面是使用VBS编写的批量修改文件名代码,可以将有相同字符的替换成想要的结果,代码为原创,只用了最简单的条件判断if语句和计数for循环便可实现。

3 Inputbox函数缺陷

在运行批量修改文件名代码时,如果不输入文件路径点确定,则会弹出”文件夹不存在”提示,对于Inputbox而言,只要弹出对话框,无论用户是否输入了值,点击确定、取消或关闭按钮中任意一个,该条语句就算成功执行,然后继续执行下一条语句。

假如用户没有输入任何值点了确定,或者输入0点确定,又或者点了取消或关闭按钮,这三种情况的返回值都是0,若不加以区分,错误的结果会导致后续程序出错。

在现有文献中,未找到相关解决办法来识别用户到底采取了哪种操作。经长时间探索,总结出了一种可以通过判断返回值的类型和长度,再利用系统错误处理,能准确判断用户的操作的方法,编程者可以根据判断结果进行提示和决策脚本后续处理方式。代码如下:

Len为计算表达式的长度,cstr转换成字符型,cint转换成整型。当用户未输入任何值并点确定时,a为空,cint(a)转换会出错,但我们使用了On error resume next,忽略了该错误,程序继续运行,这样就能利用“错误”处理来进行分辨。当用户点了取消或关闭时,a返回值为0,linta为1。

VBS简单易学,实用性强,功能强大,巧用内置函数,用简单的代码、基本语句就可完成繁琐、重复的操作,在日常生活办公中能实现自动处理、模拟输入、定时操作、批处理等各种自动化,解放人力,提高工作效率。

猜你喜欢
语句代码程序
重点:语句衔接
给Windows添加程序快速切换栏
试论我国未决羁押程序的立法完善
创世代码
创世代码
创世代码
创世代码
“程序猿”的生活什么样
英国与欧盟正式启动“离婚”程序程序
我喜欢