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


 

菊子曰 今天你菊子曰了么?
posted @ 2010-03-29 12:07  surfacetension  阅读(1967)  评论(0编辑  收藏  举报