一个硬件工程师的Excel VBA的自学之旅。
在利用Excel VBA编写小程序时,经常涉及到文件的操作,下面以实例方式对对文件的操作进行了总结。
一、返回当前Excel文件的路径
在使用VBA对Excel文件进行操作时,常常需要获取当前文件的路径,现在需要在《例子》文件中编写一段程序,执行后显示《例子》文件的路径。代码如下:
Public Sub 获取当前文件的路径()
Dim iFilpath As String '保存当前文件的路径
iFilpath = ThisWorkbook.Path '获取当前文件的路径
MsgBox iFilpath '显示当前文件的路径
End Sub
视频加载中...
代码主要用了Path取得当前文件路径,ThisWorkbook.Path返回的是当前工作薄的路径,也就是写有VBA代码的文件的路径。
二、打开当前Excel文件路径下的某文件
在使用VBA对Excel文件进行操作时,常常需要对当前文件所在路径下的另一个文件进行操作,现在需要在《例子》文件中编写一段程序,执行后打开同一路径下的A文件。代码如下:
Public Sub 打开指定文件()
Dim iFilpath As String '文件的路径
Dim iFormat As String '文件格式
Dim iFilname As String '文件名字
iFilname = Application.InputBox(prompt:="请输入需要打开的Excel文件名:", Title:="操作提示", Type:=2)
If iFilname = "" Then '判断是否输入文件名
MsgBox "错误,没有输入Excel文件名!!!"
Exit Sub '退出Sub
End If
iFormat = Application.InputBox(prompt:="请输入Excel文件的格式:", Title:="操作提示:例如xls、xlsx等", Type:=2)
If iFilname = "" Then '判断是否输入文件格式
MsgBox "错误,没有输入Excel格式!!!"
Exit Sub '退出Sub
End If
iFilpath = ThisWorkbook.Path & "\" & iFilname & "." & iFormat '需要打开的文件的路径
If Len(Dir(iFilpath, vbDirectory)) = 0 Then '判断需要打开的文件在该路径下是否存在
MsgBox "输入的Excel文件不存在!!!"
Exit Sub
End If
'MsgBox iFilpath
Workbooks.Open iFilpath '打开文件
End Sub
视频加载中...
代码利用了上面的ThisWorkbook.Path或许当前工作薄的路径,再加上自己手动输入的文件名,就得到了需要打开文件的路径。然后使用”Workbooks.Open 文件路径” 打开文件。关闭指定文件可以使用Workbooks(“文件名”).Close,保存指定文件可以使用Workbooks(“文件名”).Save。
其中,多次使用了If语句判断了文件名有没有输入、文件格式有没有输入、文件路径对不对,这是以防输入有误,避免打不开文件。
使用了Dir函数返回一个String值,语法:Dir(pathname[,attributes])
参数:pathname可以是文件的路径;attributes参数可选,输入vbDirectory,表示指定无属性文件及其路径和文件夹。Eg:Dir(iFilpath, vbDirectory)
如果没有找到pathname,则会返回零长度字符串(“”)。
Len()函数返回字符串的长度,Eg:Len(Dir(iFilpath, vbDirectory))
所以通过Dir函数和Len函数可以判断需要打开的文件是否存在。
三、获取当前Excel文件路径下的所有文件
当写有Excel VBA代码的文件所在的文件夹里,还有很多其他文件时,但是数量不固定,名字不固定,现需要把其它文件的名字依次写在当前Excel里面。代码如下:
Public Sub 获取其他文件名字()
Dim iFilname As String '文件名字
Dim iFilpath As String '文件的路径
Dim i As Integer
i = 1
iFilpath = ThisWorkbook.Path '获取当前文件的路径
Set sht = ThisWorkbook.Worksheets(5) '在Sheet(5)记录数据
sht.Cells(i, "A").Value = "文件名汇总"
iFilname = Dir(iFilpath & "\*.xlsx") '获取指定路径下的excel文件名 xlsx格式 获取完所有文件,返回""
Do While iFilname <> "" '判断文件是否为空
If InStr(1, iFilname, "例子") = 0 Then 'VBA所在的文件不需要记录
i = i + 1
sht.Cells(i, "A").Value = iFilname '在A列记录文件名
End If
iFilname = Dir() '获取下一个文件
Loop
End Sub
视频加载中...
代码里面了上面介绍的Dir函数,本例使用Dir(iFilpath & "\*.xlsx") ,返回指定路径下xlsx格式的excel文件。后面使用了iFilname = Dir() 以获取下一个文件,可以不输入参数了。
如果路径下没有xlsx格式的文件了,则Dir会返回一个零长度字符串(“”),所以这个可以用来循环的判断条件,当文件名为””时,退出循环。
用InStr函数判断一个字符串在另一个字符串中是否存在。本例中,不需要记录《例子》文件,所以用InStr(1, iFilname, "例子") = 0来判断文件名中是否包含了”例子”两个字。如包含,就返回大于0的数,不包含就返回数字0。
以上就是三种对于Excel文件的操作,各位网友可以想想怎么在同文件夹内的其他Excel文件里面都写上一句话,每个文件包括打开,写入,保存,关闭等动作。
因作者的能力和知识有限,上述文章难免有错误及不妥之处,敬请各位网友批评指正。