最近闲来无事,学了点VBA。今天来分享一下。
虽然现在都用python,但是还是有很多朋友因为各种原因必须要用到VBA,所以入个门还是不亏的~
本文全是干货,跳过了什么if else,do while的内容。可快速上手开发。
基础
VBA分sub和function。function有返回值,但是sub没有返回值。
声明变量
sub 笔记()
Dim 变量名 as 变量类型 '除了dim,还可以用 private ,public ,static
END sub
可以用一个语句同时声明多个变量
Dim 变量1 as 变量类型, 变量2 as 变量类型 '无论变量类型是否相同都要分别指明变量类型
可以用变量声明符声明变量类型
如:
Dim str$ '定义一个字符串(string)类型变量str
variant类型
variant类型是变体型,就是什么类型数据都可以存放
实际应用
其实就是我自己做过的内容啦
不是实际案例,但是是我理解之后,感觉会比较好懂的形式写出来的。
VBA操作文件
sub 操作文件()
dim path1 as string
dim path2 as string
dim filename as string
path1=某某路径
path2=某某某路径
filename=你想操作的文件名(全面,加上文件类型如123.txt)
copyfile path1 & "\" & filename,path2 & "\" & filename 'copyfile(很直观的名字,复制文件)旧路径+文件名,(逗号重点是这个逗号)新路径+新文件名
kill path & "\" & filename '删除你想删除的文件
dim fso as object
dim mytxt as object
fso = createobject("scripting.filesystemobject")
mytxt =fso.createtxtfile(filename,True) '创建名为filename的文件
if len(Dir(path1 & filename))>0 then '判断文件是否存在,也可以写成判断dir(文件)是否为空
'你的操作
else
'你的操作
end if
if Dir(path1,vbDirectory)<>"" then
msgbox "该文件夹/目录已经存在!"
else
MKDir (path1) ’创建一个文件夹/目录
end if
name path1 & filename as path2 & filename 'name可以给文件重命名,当前后路径不同时,可将文件移动并重命名
end sub
emmm
操作文件差不多就这些,我还不是大佬,只是一个入了门的小白,暂时先分享这么多。随时更新。
后面看一些我自己用到的别的功能
操作cmd命令/.bat文件
不多说,上代码
sub myshell()
dim myshell1 as object
dim myshell2 as object
set myshell1 = createobject("wscript.shell")
set myshell2=myshell1.exec("cmd.exe /c" & "你的cmd命令") ‘这是在VBA中写cmd命令的方法,exec()括号中可以写变量,也就是你的代码可以是动态的。"cmd.exe /c"是打开cmd窗口。
shell ("你的.bat文件") ‘直接调用你写好的.bat文件(跟上一行代码没关系,这是另一种用法。但这种用法cmd命令是死的)
end sub
操作网页
额,,,,这个比较复杂,我本人也还是不是很懂,只是会一丢丢。
参考
https://www.cnblogs.com/dazuo/p/4898170.html
打开网页
Sub sample()
Dim objIE As InternetExplorer
'IE(InternetExplorer)对象的创建
Set objIE = CreateObject("InternetExplorer.Application")
'IE(InternetExplorer)显示
objIE.Visible = True
'显示指定的URL
objIE.Navigate "http://www.vba-ie.net/"
'在网页完全加载完成之前等待
Do While objIE.Busy = True Or objIE.ReadyState <> 4
DoEvents
Loop
End Sub
不得不说,这个大佬的注释写的是真到位!
点击网页中的按钮
参考这个:
Excel VBA对网页的操作
http://club.excelhome.net/thread-1489382-1-1.html
(出处: ExcelHome技术论坛)
Sub sample()
Dim objIE As object
objIE.document.getElementById("F12看一下你要操作的按钮的id").click
objIE.document.getElementById("F12看一下你要操作的文本框的id").Value = "你想输入的内容"
'上面是通过网页中元素的ID进行判断,同理也可以通过元素的TagName进行判断
objIE.document.getElementByTagName("F12看一下你要操作的按钮的TagName").click
objIE.document.getElementByobjIE.document.getElementByTagName("F12看一下你要操作的文本框的TagName").Value = "你想输入的内容"("F12看一下你要操作的文本框的id").Value = "你想输入的内容"
'经验有限,只能简单列举这两种。有的网页设计既没有ID也没有TagName,那就只能通过识别是第几个元素来判断了(这是我搜的,不对的话可以评论告诉我,灰常感谢!),就是自己一个一个查。
end sub
因为研究有限,网页部分写的不全。例如根据VBA(excel)版本不同或者计算机运算位数不同(64位,32位)打开窗口的前提条件(权限?)不同,具体参考我第二个给的URL中的大佬写的第一行代码。
msgbox的运用
这个贼简单
sub mymsgbox()
msgbox ("你想提示的文本",你想设定的按钮,窗口标题,帮助,context不知道怎么用) '除了文本其它都是可选项
'一个简单的运用
if msgbox ("你是否要进行下一步?",vbOKCancel,"提示") = vbOK Then
'下一步操作
else
exit sub
end if
msgbox "你学费了吗?"
end sub
关于button的设定有很多样式,详细可以参考下面的网址
msgbox函数详解—office官网
关闭屏幕更新
为了避免在代码执行时,屏幕频繁更新(比如频繁切换文件或者sheet页这种看着贼烦还容易卡的情况),我们可以通过ScreenUpdating来控制屏幕更新
sub 屏幕更新()
你的代码
Application.ScreenUpdating = False '关闭屏幕更新
让你频繁屏幕更新的代码
Application.ScreenUpdating = True '开启屏幕更新
你的代码的执行结果只会当你的代码执行到Application.ScreenUpdating = True的时候才会显示结果。
暂时先写这么多,以后再完善更新~