VBA中操作文件及文件夹的常用命令
这段时间写的程序也少了,可能是真正的会了,也就这么回事了。但这几天一直在想一个问题,如何操作文件及文件夹,虽然以前也零零碎碎写了一点,但一直没有好好整理过,都是到用时再查找资料,要求也不高,只要能过关就行。现在想着趁着还能上网,还是抓紧时间整理一下吧。
想要解决的问题如下:
⒈在指定工作簿中①如何添加新工作表,并重命名;②如何删除指定工作表,并不出现提示;③如何统计工作表的个数;④如何将指定工作表移动到新工作簿或更改次序;⑤如何保存文件,包括直接保存及另存为。
⒉如何遍历指定文件夹下的指定文件,并将其保存到工作表。
⒊如何按指定格式更改文件名。
以上3个问题应该可以涵盖现在遇到的情况,下面一一解决。
①如何添加新工作簿,并重命名。
Workbook 对象用法
本部分将对下列返回 Workbook 对象的属性进行说明:
Workbooks 属性
ActiveWorkbook 属性
ThisWorkbook 属性
Workbooks 属性
可用 Workbooks(index)(其中 index 为工作簿名称或编号)返回单个 Workbook 对象。下例激活第一个工作簿。
Workbooks(1).Activate
编号指示创建或打开工作簿的顺序。Workbooks(1) 为创建的第一个工作簿,而 Workbooks(Workbooks.Count) 为最后一个。激活某工作簿并不更改其编号。所有工作簿均包括在编号计数中,即便是隐藏工作簿也是如此。
Name 属性返回工作簿名称。不能用该属性设置名称;如果需要更改名称,应当用 SaveAs 方法以其他名称保存工作簿。下例激活工作簿“Cogs.xls”中的工作表“Sheet1”(该工作簿必须已在 Microsoft Excel 中打开)。
Workbooks("Cogs.xls").Worksheets("Sheet1").Activate
ActiveWorkbook 属性
ActiveWorkbook 属性返回当前处于活动状态的工作簿。下例设置活动工作簿的作者名称。
ActiveWorkbook.Author = "Jean Selva"
ThisWorkbook 属性
ThisWorkbook 属性返回 Visual Basic 代码正在运行的工作簿。在绝大多数情况下,这也就是活动工作簿。然而,如果 Visual Basic 代码是加载宏的一部分,那么 ThisWorkbook 属性就不会返回活动工作簿。在这种情况下,活动工作簿是调用加载宏的工作簿,而 ThisWorkbook 属性将返回该加载宏工作簿。
如果用 Visual Basic 代码创建加载宏,那么对于那些编译到加载宏中的工作簿,在其中运行的语句应当用 ThisWorkbook 属性加以限定。
演示如何添加工作簿并进行更名及相关操作
Sub 添加工作簿()
Application.DisplayAlerts = False
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="E:aaidafd.xls" '保存到指定文件夹中
ActiveWorkbook.SaveAs Filename:="adiasf.xls" '保存到与代码所在工作簿同一文件夹中.
ActiveWorkbook.Close savechanges:=True '关闭当前活动工作簿,并保存更改.
Workbooks(1).Activate '将第1工作簿激活,但由于并不甚清楚工作簿如何排序的,所以尽量少用.
ThisWorkbook.Activate '将VBA代码所在工作簿激活,这句比较实用.
Application.DisplayAlerts = True
Debug.Print Workbooks.Count '统计工作簿的个数
Debug.Print Worksheets.Count '统计当前工作簿中工作表的个数,包含隐藏工作表.
End Sub
演示关于工作表本身的操作,例如:更名/移动位置/添加等.
Sub 工作表()
'如何添加工作表
Worksheets.Add after:=Worksheets(Worksheets.Count) '添加新工作并放在倒数第1位置处.
Worksheets.Add before:=Worksheets(Worksheets.Count) '添加新工作表并放在倒数第2位置处.
'如何更改工作表的顺序
Sheets(1).Move before:=Worksheets(Worksheets.Count) '移动指定工作表到指定位置处,但这个地方不会出现提示。
Worksheets(1).Move before:=Worksheets(Worksheets.Count) '移动指定工作表到指定位置处.
'如何更改工作表名称
ActiveSheet.Name = "xiehui" '将当前活动工作表更改为指定名字.
Worksheets(1).Name = "sidafd" '将当前工作簿中指定工作表更名.
'如何为一指定工作表建立副本
worksheets(1).copy
End Sub
遍历文件夹,获得文件名并只保留文件名.
Sub 遍历指定文件夹下的所有文件并只保留文件名()
Dim i As Integer
Dim sr As FileSearch '定义一个文件搜索对象
Set sr = Application.FileSearch
sr.LookIn = "E:2009-2010学年历次考试2009年11月份考试--学校统考补考名单" '注意路径,换成你实际的路径
sr.Filename = "*.*" '搜索所有文件
sr.Execute '执行搜索
Cells.Delete '表格清空
For i = 1 To sr.FoundFiles.Count
Cells(i, 1) = sr.FoundFiles(i) '每一行第一列填写一个文件名
Next
'获取共有多少行,为下一步循环做准备
totalR = Range("A65536").End(xlUp).Row
'这是左边取,结果为"E:"
' For i = 1 To totalR
' Cells(i, 1).Value = Left(Cells(i, 1).Value, InStr(1, Cells(i, 1).Value, "") - 1)
' Next i
'若从右边取呢?结果只保留了文件名
For i = 1 To totalR
Cells(i, 1).Value = Right(Cells(i, 1).Value, Len(Cells(i, 1).Value) - InStrRev(Cells(i, 1).Value, ""))
Next i
End Sub