自定义函数
一、函数使用
- 自定义的函数如果要在 excel 表格中直接引用的话,需要在模块中定义,实测工作表和工作簿中定义的话都是无法在excel 中直接引用的
- 如果一个工作簿的自定函数想在另外的excel 文件中使用的话,最好的方就通过另存为加载宏的方式,加载宏的具体的用法前面已经说过了这里不再赘述
- vba 函数可以返回数组,只要将函数名变量赋值为数组即可
二、函数参数
- 支持选择参数
- 支持参数默认值
- 支持类似java中的可变参
Function test(Optional ha As Integer = 100)
If ha = 0 Then
MsgBox "ha = 0"
Else
MsgBox "ha = " & ha
End If
End Function
Sub hello()
Call test
Call test(11111)
End Sub
Sub hello()
Call t1(10, 12, 13)
Call t1(100, 45)
End Sub
Function t1(ParamArray n())
Dim sum
For Each a In n
sum = sum + a
Next a
Debug.Print sum
End Function
窗口和对话框组件
一、msgbox
msgbox (显示内容 ,按钮和图标, 窗口标题, 帮助文件 ,帮助文件编号)
chr(10) 换行、chr(13)回车、chr(9) 制表、space(n)生成空格
确定:1
取消:2
终止:3
重试:4
忽略:5
是:6
否:7
Sub t2()
Debug.Print MsgBox("hello" & Chr(9) & "haha", vbYesNo + vbInformation, "alert")
End Sub
二、inputbox
1、概述
- 使用输入框的话,可以使用inputbox 函数,也可以使用 application 的 inputbox 方法
- 二者基本的参数就是一致的,app 的 inputbox 方法就是多了指定输入类型的参数而已,简单使用的话 inputbox 函数就够用了
- 具体的参数的参考如下图

- 最后一个类型参数的具体值参考如下
0---公式
1---数字
2---文本
4---true or false
8---range 对象
16---错误值
64---数组
2、使用细节
引用单元格
Dim ret As Variant
Set ret = Application.InputBox("请选择一个单元格区域", "输入框", , , , , , 8)
Debug.Print ret.Address
公式引用
Sub test()
Dim ret As Variant
ret = Application.InputBox("输入一个公式", "提示", , , , , 0)
Debug.Print TypeName(ret)
Debug.Print ret
End Sub
限制输入返回的类型
数值数组
Sub test10()
Dim r
r = Application.InputBox("输入数组", "输入提示", , , , , , 64)
Debug.Print r(1, 1)
Debug.Print TypeName(r)
End Sub

三、Excel 对话框
1、getOpenFilename
- 参数参考如下

- 基本的用法如下,最后就是打印出文件名,并不会打开文件
Sub test()
f = Application.GetOpenFilename("excel文件,*.xlsx")
Debug.Print f
End Sub
2、GetSaveAsFilename
- 打开另存为的窗口选择文件,本质还是获取文件名,并不会真正保存文件
Sub test()
f = Application.GetSaveAsFilename("excel文件,*.xlsx")
Debug.Print f
End Sub
3、FileDialog
- 对比前面两个的优势是可以真正打开文件,而且可以获取文件夹的路径
Sub UseFileDialogOpen()
Dim lngCount As Long
With Application.FileDialog(msoFileDialogOpen)
.AllowMultiSelect = True
.Show
For lngCount = 1 To .SelectedItems.Count
MsgBox .SelectedItems(lngCount)
Next lngCount
End With
End Sub
4、Dialogs
- 该集合代表所有内置对话框,通过指定不同的参数可以显示各种对话框
Sub test()
Application.Dialogs(xlDialogOpen).Show
End Sub
- 参数参考

字符串操作
一、基本操作
1、截取
Sub test()
Dim h As String
h = "你的问题就是这样的"
Debug.Print Left(h, 2)
Debug.Print Right(h, 2)
Debug.Print Mid(h, 2, 3)
End Sub
你的
样的
的问题
- split、join
- val 函数取字符串中的数字,但是这个函数只能取开头的数字
Sub test()
Dim h As String, h2 As String
h = "89元的汉堡"
h2 = "汉堡89元"
Debug.Print Val(h)
Debug.Print Val(h2)
End Sub
89
0
2、组合
3、查找替换
Sub test()
Dim h As String, h2 As String
h = "89元的汉堡89"
Debug.Print InStr(h, 89)
Debug.Print InStrRev(h, 89)
End Sub
- replace、mid:mid会改变原来的字符串,而replace不会
Sub test()
Dim h As String, h2 As String
h = "89元的汉堡89"
Debug.Print Replace(h, 89, 100)
Mid(h, 1, 3) = 999
Debug.Print h
End Sub
100元的汉堡100
999的汉堡89
4、大小写转换
Sub test()
Debug.Print LCase("HELLO")
Debug.Print UCase("hello")
Debug.Print StrConv("hello", 1)
Debug.Print StrConv("HELLO", 2)
Debug.Print StrConv("hello how are you", 3)
End Sub
5、空格去除
6、字符数字转换
7、生成重复字符
space(10)
:10个空格
string(10,"*")
:10个 *
二、like 匹配
- 单个占位符
?
多个占位符*
- 通配符加
[?]
转换为普通意义的符号
- 数字匹配符
#
- 区间匹配
[a-zA-z][!a-z]
- 单个匹配
[abcd]
- 首尾匹配
[a]*[p]