|
- Sub test()
- Dim fd As FileDialog
- Dim Path As String, Name As String
- Dim T$, i%
- On Error GoTo line1 '当产生错误的时候跳转到line1行,退出程序
-
- Set fd = Application.FileDialog(msoFileDialogFolderPicker) '使用 FileDialog 对象显示"文件选取器"对话框
- With fd
- If .Show = -1 Then '如果选择了确定按钮,则(.show的值等于0,表示按取消按钮)
- T = .SelectedItems(1) & "" '用T记录下它的路径
- Else
- Set fd = Nothing: Exit Sub '按取消之后就退出程序
- End If
- End With
- Application.ScreenUpdating = False '关闭屏幕更新,防止闪屏及加快代码执行
- Application.EnableEvents = False '不运行除本程序之外的其它程序,如新工作簿被打开时运行的open程序等
- Application.DisplayAlerts = False '关闭各种警告和消息,选择默认应答
- With Application.FileSearch '建立一个新的搜索
- .LookIn = T '范围为先前的路径
- .SearchSubFolders = True '搜索范围包含当前路径下的子文件夹
- .Filename = "*.xls" '搜索的程序名称为excel表
- .Execute msoSortByFileName '执行搜索过程,并按文件名称排序,后面的排序参数可以省略
- For i = 1 To .FoundFiles.Count
- s = .FoundFiles(i)
- BreakdownName s, Path, Name '把s分解成路径名和表名
- Set wb = Workbooks.Open(s) '打开这个工作簿
- For Each shtExcel In wb.Sheets '在这个工作簿里的每个工作表里循环
- shtExcel.Range("a2") = shtExcel.Name
- Next
- wb.Close True '保存打开的工作簿
- Next i
- End With
-
- line1:
- Application.ScreenUpdating = True '重新设置系统,为程序运行之前的设置
- Application.EnableEvents = True
- Application.DisplayAlerts = True
- End Sub
- Sub BreakdownName(ByVal s As String, ByRef Path As String, ByRef Name As String) 'byref表示按引用来传递
- 'byval表示按值来传递,一般情况省略
- Dim a
- a = Split(s, "") '按\分成一个数组
- Name = a(UBound(a)) '取数组的最大一个,即表名
- Path = Left(s, Len(s) - Len(Name) - 1) '取路径
- End Sub
- '效果类似于下面的:
- 's = C:\Documents and Settings\hujinsong\桌面\按值来传递.xls
- 'Path C:\Documents and Settings\hujinsong\桌面'name 按值来传递.xls
复制代码 代码参考龙三老师的。
[ 本帖最后由 jiminyanyan 于 2010-11-15 07:52 编辑 ] |
|