Excel中VBA编程学习笔记(五)
28、程序运行时间统计
Sub test()
begin_time = Timer
For i = 1 To 1000
For j = 1 To 10000
x = x + 1 * 2
Next
Next
end_time = Timer
MsgBox "运行用时" & Format(end_time - begin_time, "0.00")
End Sub
29、split函数及join函数
split函数用于分割字符串并返回一个下标从0开始的数组,它包含指定的自字符串数目
Dim direc
Set direc = CreateObject("Scripting.Dictionary")
contents = Split(Content, ",") '分割符为逗号
For k = LBound(contents) To UBound(contents)
direc(contents(k)) = direc(contents(k)) + 1
Next
Key = direc.Keys
Value = direc.items
[B1].Resize(direc.Count, 1) = Application.Transpose(Key)
[C1].Resize(direc.Count, 1) = Application.Transpose(Value)
jion函数返回一个字符串,该字符串通过连接某个一维数组的多个自字符串而创建的
arr = [{"武汉","广州","深圳"}]
res = Join(arr, ";") '得到武汉;广州;深圳
30、filter函数
filter函数返回一个下标从零开始的数组,该数组包含基于指定筛选条件的一个字符串数组的子集。语法如下:
Filter(sourcesrray, match[, include[, compare]])
Filter函数语法有如下的命名参数:
部分 |
描述 |
sourcearray |
必需的。要执行搜索的一维字符串数组。 |
match |
必需的。要搜索的字符串。 |
include |
可选的。Boolean值,表示返回子串包含还是不包含match字符串。如果include是True,Filter返回的是包含match子字符串的数组子集。如果include是False,Filter返回的是不包含match子字符串的数组子集。 |
compare |
可选的。数字值,表示所使用的字符串比较类型。有关其设置,请参阅下面的“设置值”部分。 |
设置值
Compare参数的设置值如下:
常数 |
值 |
描述 |
vbUseCompareOption |
–1 |
使用Option Compare语句的设置值来执行比较。 |
vbBinaryCompare |
0 |
执行二进制比较。 |
vbTextCompare |
1 |
执行文字比较。 |
vbDatabaseCompare |
2 |
只用于Microsoft Access。基于您的数据库信息来执行比较。 |
arr = [{"abc","bb","bp","c","eda","tubdu"}]
res1 = Filter(arr, "b", True) '{"abc","bb","bp","tubdu"}
res2 = Filter(arr, "b", False) '{"c","eda"}
31、自动关闭的消息框
语法:
wshell.Popup(StrText,[natsecondsToWait],[strTitle],[natType]=inButton)
参数说明:
StrText为提示文本,natsecondsToWait为等待时间,natType为按钮类型。
【例】
Sub test()
Dim wshell As Object
Set wshell = CreateObject("Wscript.Shell")
wshell.popup "执行完毕!", 1, "提示", 64 '1s后自动关闭
Set wshell = Nothing
End Sub
32、使用inputBox限制输入内容
语法:
expression.InputBox(Prompt,Title,Default,Left,Top,HelpFile,HelpContextId,Type)
参数说明:
参数 |
说明 |
Prompt |
消息框提示字符串(必须参数) |
Title |
输入框标题 |
Default |
输入文本框缺省内容 |
Left |
相对于屏幕左上角的x坐标 |
Top |
相对于屏幕左上角的y坐标 |
HelpFile |
上下文相关帮助 |
HelpContextId |
帮助编号 |
Type |
返回的数据类型,缺省为文本类型。 |
Type的参数可取值如下:
数值 |
说明 |
0 |
一个公式 |
1 |
一个数字 |
2 |
文本(字符串) |
4 |
一个逻辑值(TRUE或FALSE) |
8 |
一个单元格引用你 |
16 |
一个错误值 |
64 |
一个值得数组 |
注意:
Application.InputBox调用的是InputBox方法,而不带标识的InputBox调用的InputBox函数;
InputBox方法比InputBox函数具有更好的内置出错处理;
当用户点击“取消”时,InputBox方法返回的是FALSE,而InputBox函数返回的是长度为0的字符串。
【例1】
Sub test()
Dim num
num = Application.InputBox(Prompt:="请输入一个数值", Title:="输入", Type:=1) '调用InputBox方法
If num <> False Then
MsgBox "输入内容为:" & Chr(10) & num
Else '取消输入时返回FALSE
Debug.Print "用户取消了输入"
End If
End Sub
当输入的不是数字是会有如下提示:
【例2】
Sub test()
Dim rng As Range
On Error GoTo line
Set rng = Application.InputBox(prompt:="请选择区域", Type:=8)
Dim res$
For Each Row In rng.Rows
For Each cell In Row.Cells
res = res & cell.Value & Chr(9) '同一行不同值用制表符隔开
Next
res = res & Chr(10)
Next
MsgBox "选择区域内容如下:" & Chr(10) & res '加上换行符
line:
If Err.Number <> 0 Then
MsgBox Err.Description
End If
End Sub