前言
本节会介绍通过VBA实现打开其他excel文件,包括模糊匹配文件名称、循环同时打开多个文件,并获取工作表及工作簿进行数据操作后,对打开的文件进行保存并关闭操作。
一、打开固定文件名称的文件
场景说明:
1.新建一个宏文件VBA_Code.xlsm
2.与VBA_Code.xlsm文件在同一路径下有名为EmployeeInfo.xlsx的文件
3.需要将EmployeeInfo.xlsx的A1单元格写入当前日期值
示例代码
以下代码中,定义filePath 用来存放当前文件的路径,ws 和wb分别用来存放工作表及工作簿对象
c
Sub OpenTheFile()
Dim filePath As String
' 定义工作表及工作簿数组
Dim ws As Worksheet
Dim wb As Workbook
' 定义该文件路径
filePath = ThisWorkbook.Path
' 获取路径下所有文件,这里需要提供完整的文件路径
Workbooks.Open filePath & "\EmployeeInfo.xlsx"
' 设置工作表及工作簿
Set ws = ActiveWorkbook.Worksheets("Sheet1")
' 这里也可以通过工作表索引位置来设置,从1开始
'Set ws = ActiveWorkbook.Worksheets(1)
Set wb = ActiveWorkbook
' 写入当前时间值
ws.Cells(1, "A").Value = Now()
' 保存并关闭
wb.Save
wb.Close
End Sub
二、模糊匹配文件名称
场景说明:
1.新建一个宏文件VBA_Code.xlsm
2.与VBA_Code.xlsm文件在同一路径下有名为EmployeeInfo202407.xlsx、Test202407.xls的文件
3.需要将EmployeeInfo202407.xlsx和Test202407.xls两个文件的A1单元格都写入当前日期值,但是文件名称中的日期不固定
示例代码
文件名称不固定,可以使用Like 搭配星号<*>进行模糊匹配。完整的代码如下:
c
Sub OpenFile()
Dim myFile As String
Dim filePath As String
' 定义工作表及工作簿数组
Dim wsE As Worksheet
Dim wsT As Worksheet
Dim wbE As Workbook
Dim wbT As Workbook
' 定义该文件路径
filePath = ThisWorkbook.Path
' 定义文件路径下的所有文件
myFile = Dir(filePath & "\*.xls*")
' 循环处理所有文件
Do While myFile <> ""
' 匹配Employee文件
If myFile Like "Employee*" Then
Workbooks.Open filePath & "\" & myFile
Set wsE = ActiveWorkbook.Worksheets("Sheet1")
Set wbE = ActiveWorkbook
' 匹配Test文件
ElseIf myFile Like "Test*" Then
Workbooks.Open filePath & "\" & myFile
Set wsT = ActiveWorkbook.Worksheets("Sheet1")
Set wbT = ActiveWorkbook
End If
Loop
' 写入当前时间值
wsE.Cells(1, "A").Value = Now()
wsT.Cells(1, "A").Value = Now()
' 保存并关闭
wbE.Save
wbE.Close
wbT.Save
wbT.Close
End Sub