hahada 发表于 2014-4-8 14:44
那下面再解释下
Dim sz(), sz1, SZ2(), myRegExp As Object
On Error Resume Next '跳过错误继续执行程序
Set myRegExp = CreateObject("VBScript.RegExp") ’创建一个正则表达式对象
myRegExp.Global = True '设置正则搜索为全局搜索
myRegExp.IgnoreCase = Ture '设置正则搜索为忽略大小写
myRegExp.Pattern = "\d{4}-\d{1,2}-\d{1,2}-\d{1,2}.xls" ’正则的搜索匹配模型为:4个数字,一个 - 号,1到2个数字一个 -号,1到2个数字,一个 - 号,1到2个数字,一个.号,xls
S = Dir(ThisWorkbook.Path & "\*.xls") '把dir得到的代码文件 所在的文件夹下的 xls文件名赋值给S.
N = -1 '给变量N赋值为-1
Do While S <> "" ’当满足S<>""这个条件时,执行DO循环。
If UCase(S) Like "*#-*#-*#-[0-9][0-9]*.XLS" Then ' 如果 这个xls文件名忽略大小写后符合:任何字符加一个数字加一个 - 号,加任何字符加一个数字加一个 - 号,任何字符加一个数字加一个 - 号,加两个数字,后面用或者没有任意字符.xls 这样的样式就执行下面的代码。
N = N + 1 '计数开始,第一个N值为:-1+1=0
ReDim Preserve sz(N) ’ 保留数组sz原有值的情况下,重新字义数据sz的最后一维的个数,以便写入下一个xls文件名
sz(N) = S '把符合上面条件的xls文件名装入数组的第N个位置。
If UCase(S) Like "??[0-9]*" Then '如果这个xls文件名忽略大小写后符合: 第三个字符为数字的文件。就执行下面的代码。
ReDim Preserve SZ2(N) '在保留数组SZ2的原有元素的基础上重新扩大数组的第二维的维数为N.
SZ2(N) = Mid(S, 3, 1) '取出文件名中的第三个字符(即第三个数字)存放在SZ2的第N个位置。
End If ’结束IF判断
End If ’结束IF判断
S = Dir '重新取得下一个XLS文件名赋值给S。以便于DO循环进行取值。
Loop ’ DO循环线束
Set matchs = myRegExp.Execute(Join(sz, ",")) '把数组sz中的xls文件名用,号连接起来为一个字符串。通过正则表达式的搜索,把所有符合patten模型的字符串全都取出来赋值给变量:matchs