VBA教学视频

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010314160/article/details/84543212

全民一起VBA视频笔记

https://pan.baidu.com/s/1OByDbZA0BUQSuxVqOkaKMQ
看在线加速请用火狐浏览器,右键视屏直接可以选择播放速度,妈妈再也不担心我学东西慢了!!!

基础篇:

子过程 无返回值
Sub XXX()

End Sub

函数 可以返回值 XXX = 变量
Function XXX(s)

End Function

Cells(行,列)

强制声明
Option Explicit 代码首行位置 不准为没有定义的变量赋予内存空间
Dim 变量1,2,3 没有没被Dim声明的变量均为非法变量

Const 常量声明

循环x到Y每次增加W
For i = x to y Step w
循环体
Next i

If 条件1 Then
语句1
ElseIf 条件2 Then
语句2
Else
语句3
End If
关系运算符:不等于<> 等于=

“1”&“1”=“11” 当两边都是字符串时 + 等于 & (除非必要不要使用 +)

扫描二维码关注公众号,回复: 4716473 查看本文章

And Or Not 与或非

Range 和 Cells的方法基本通用

Rows(i) 代表第i行

While 条件
循环体
Wend

Do While 条件
循环体
Loop

Rem XXX/’ XXX 注释文本

对象:
Application 正在运行的Excel系统本身
WorkBook 一个打开的Excel文件
WorkSheet 一张工作表
Range 一个或若干个单元格组成的内容区域

Dim x AS X x是一个X对象
Set x = 对象集(i) 给对象x赋值

Call XXX 调用子过程(宏)XXX()

MsgBox X 打印字符串或变量X

VBA内置函数
https://blog.csdn.net/iamlaosong/article/details/73469870?utm_source=blogxgwz0

For Each x In XXX

Next x

Workbooks.open(文件路径)
WorkBooks.SaveAs “路径及文件名”
WorkBooks.Add
WorkBook.Close

RGB(a,b,c) [0-255]

With 共同前缀

End With


提高篇:

变量 As Interger/String 指定变量类型 默认是变体类型Variant(效率低,自动类型转换结果可能不是预期的)
变量&(% Interger,& Long,! Single,# Double,@ Currency,$ String) 指定类型

Interger 2字节 -32768 ~ +32767
Long 4字节 -2147483648 ~ +2147483647
Double 8字节 有误差
Currency 8字节 小数四位 无误差

: 多行语句拼接一行
&_ 字符串与下一行连接
_ 数字与下一行连接
^ 乘方
\ 整数除法(舍弃小数)

变量 As Date 日期类型 公元100年1月1日0点0分0秒 ~ 公元9999年12月31日23点59分59秒 本质是Double 0代表1899年12月30日0时0分0秒
#月日年 时分秒# 日期赋值

Date 当前系统日期(年/月/日)
Time() (时/分/秒)
Now() 年/月/日/时/分/秒

vba日期和时间函数
https://blog.csdn.net/w57w57w57/article/details/43772081

Exit Do/For/Sub/Function 退出循环 没有Exit While 只能跳出一层
Goto XXX: 跳转到(语句XXX:)

On Error Resume Next 忽略错误继续执行

IsDate(x) 是否是日期类型
IsNumeric(x) 是否是数字
TypeName(x) 返回数据类型字符串

CDate(x) 转换时间类型 含义相同 大小相容

Round(x,n) VBA系统 小数将它转换到最近的偶数(“银行家”舍入法) n不可省略
Round(x,n) Excel工作表 逢五进位 n可省略
Int(x + 0.5) 四舍五入取整

Chr(i) i对应ASC编码的字符
Asc(“x”) x的ASC编码值

Dim cn(10) As String 声明11个元素的数组
Dim cn() 动态数组 ReDim cn(7)
Dim a(3 To 6) 最小下标为3,最大为6
LBound(a) 最小下标
UBound(a) 最大下标
s = Range(“b3:e5”) 二维数组,s是变体类型,下标从1开始
Application.Transpose(s) 数组转置,一维数组赋值给列区域

Split(字符串,分隔符) 拆分字符串

Open 文件路径 For Input As #1 打开指定文件代号1 Output没文件就新建,有文件就覆盖 Append没就新建,有就追加
Line Input #1,s 读取一行到s中
EOF(1) 代号1文件是否达到文件末尾
Close #1 关闭文件
Print #1,xxx 写入文件

Dir(文件路径) 获取指定路径下从头开始的第一个文件名(非全路径名)支持通配符
Dir() 继续寻找下一个文件名
Dir(文件路径,vbDirectory) 搜索文件和子文件夹的名字

ActiveSheet.Cells.Rows.Count 本工作表全部范围的最大行号
ActiveSheet.UseRange 使用过的范围 判定误差:1.空工作表$A$1即使为空 2.设置格式

Range.hasFormula 当Range为一个单元格时,若为公式返回True
Range.Formula 若为公式返回公式文本,其他返回与Value属性一样

替换公式为文本
For Each w in Worksheets
w.UseRange.Value = w.UseRange.Value
Next w

Application.Union(r1,r2,r3) 可以把多个Range联合起来作为一个新的Range返回
Application.Intersect(r1,r2,r3) 找多个同属多个Range的单元格作为一个新的Range返回
Range对象.CurrentRegion 返回一个包含了和诸葛Range的最大连续使用区域,该区域与其他已使用单元格都不邻接
Range对象.Resize(1,2) 以该Range的左上角单元格为原点。生成一个指定大小的新的Range对象并返回 行列大于0
Range对象.Offset(3,2) 根据Range的大小,移动指定距离,返回新的同样形状的Range
Range(“D6:E7”).MergeCells 当该Range完全合并为一个单元格时为True,不完全时为False,其他Null
IsNull(a) 判断是否为Null
Range对象.Merge 合并为一个单元格
Range对象.UnMerge 取消合并
Range对象.Merge True 按行合并
Range对象.Select 选中区域
Range对象.EntireRow 该单元格所在整行
Range对象.EntireColumn 该单元格所在整列
Selection 选中的区域

录制宏优化
1.尽可能合并不必要的Select与Selection
2.尽可能删除不必要的对象属性设置
3.尽可能减少对象中点号的数量(深度)

Optional 变量 = 值 函数默认值
IsMissing(变体变量) 是否提供了参数 ,没有默认值参数
:= 可以按照参数名传递值

决定是否写括号的三种情景
1.没有参数 不写
2.有参数,调用语句处于一行代码中间 写
3.有参数,调用语句独占一行代码 不写

ByRef 引用传递 VBA默认传递方式
ByVal 值传递 不会改变原变量的值

7 Mod 3 = 1 模运算 周期性变化

Randomize 随机数初始化,确保每次运行都生成不同的随机序列 默认使用系统时间
Rnd() 随机返回0-1之间小数
Int(Rnd()*(b-a+1)+a) 生成[a,b]区间随机整数

常用事件名称
Workbook_Activate 工作簿被激活时
Workbook_Open 工作簿被打开时
Workbook_BeforeClose 关闭工作簿之前
Workbook_BeforeSave 保存工作簿之前
Workbook_BeforePrint 打印工作簿之前
Workbook_NewSheet 在工作簿汇总新建工作表

xlNone 透明色

避免产生事件级联的方法
1.使用静态变量加锁
2.使用Application.EnableEvents属性

Form.Show/Form.Hide 窗体开启/关闭

LoadPicture(路径) 加载图片

CreateObject(“vbscript.regexp”) 用于创建各种外部对象,参数为该对象的完整类型(字符串),返回为一个具体对象
Object 数据类型代表一个对象 任何类型对象的变量都可以被声明为Object类型

RegExp变量.Pattern 设置正则表达式
RegExp变量.Global True返回所有符合,False,返回第一个符合 默认False
RegExp变量.Execute(s) 返回查找s中符合的文本 Matchs集合
RegExp变量.Replace(s,r) 返回一个替换后的新字符串,不修改s
Match对象.submatches(i) 正则表达式中圆括号的部分 捕获组 替换功能

“vbscript.dictionary” 字典对象完整类型


实战篇:

Range对象.Find(“s”) 寻找内容s(支持通配符),找到的话返回第一个Range区域对象,没找到返回Nothing 什么对象都不是
https://docs.microsoft.com/zh-TW/office/vba/api/Excel.Range.Find

Office常用通配符:
? 一个任意字符

  • 任意多个任意字符
    ~ 转义符

Do
循环体
Loop While 条件
Do
循环体
Loop Until 条件

Set r = Cells.Find("*",after:=Range(“A1”),searchorder:=xlRows.searchdirection:=xlPrevious)
If r Is Nothing Then

Else

EndIf

Array(x1,x2,x3,…) 给数组动态赋值

Range对象.MergeArea 返回一个新的Range对象,代表其所在的合并趋于,若不是合并单元格则返回其本身

Shape对象 各种图形化元素

Application.ActiveWindow.VisibleRange 返回一个Rang对象,由Excel当前所有可见单元格构成

On Error Goto XXX

Exit Sub
XXX:
Err.Number 错误类型
Resume Next 返回到出错的语句下一行

On Error Gto 0 恢复默认错误处理

UserForm.Controls 当前窗体的所有控件
Me.Controls 当前窗体的所有控件,Me代表当前窗体

窗体对象.Show vbModeless 开启非模式对话框

mscomct2.ocx 控件库 放于window dll库所在文件夹
regsvr31 mscomct2.ocx 注册控件

Dim tm
tm = Now()
'…宏语句…
MsgBox “耗时:” & Format(Now()-tm, “hh:mm:ss”)

猜你喜欢

转载自blog.csdn.net/u010314160/article/details/84543212
vba
今日推荐