excel vba入门教程开窍篇60 (excel vba从入门到进阶全集)

一个硬件工程师的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文件里面都写上一句话,每个文件包括打开,写入,保存,关闭等动作。

因作者的能力和知识有限,上述文章难免有错误及不妥之处,敬请各位网友批评指正。