前言
本節會介紹通過VBA實現打開其他excel文件,包括模糊匹配文件名稱、循環同時打開多個文件,并獲取工作表及工作簿進行數據操作后,對打開的文件進行保存并關閉操作。
一、打開固定文件名稱的文件
場景說明:
1.新建一個宏文件VBA_Code.xlsm
2.與VBA_Code.xlsm文件在同一路徑下有名為EmployeeInfo.xlsx的文件
3.需要將EmployeeInfo.xlsx的A1單元格寫入當前日期值
示例代碼
以下代碼中,定義filePath用來存放當前文件的路徑,ws和wb分別用來存放工作表及工作簿對象
Sub OpenTheFile()Dim filePath As String' 定義工作表及工作簿數組Dim ws As WorksheetDim 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.Savewb.CloseEnd Sub
二、模糊匹配文件名稱
場景說明:
1.新建一個宏文件VBA_Code.xlsm
2.與VBA_Code.xlsm文件在同一路徑下有名為EmployeeInfo202407.xlsx、Test202407.xls的文件
3.需要將EmployeeInfo202407.xlsx和Test202407.xls兩個文件的A1單元格都寫入當前日期值,但是文件名稱中的日期不固定
示例代碼
文件名稱不固定,可以使用Like搭配星號<*>進行模糊匹配。完整的代碼如下:
Sub OpenFile()Dim myFile As StringDim filePath As String' 定義工作表及工作簿數組Dim wsE As WorksheetDim wsT As WorksheetDim wbE As WorkbookDim wbT As Workbook' 定義該文件路徑filePath = ThisWorkbook.Path' 定義文件路徑下的所有文件myFile = Dir(filePath & "\*.xls*")' 循環處理所有文件Do While myFile <> ""' 匹配Employee文件If myFile Like "Employee*" ThenWorkbooks.Open filePath & "\" & myFileSet wsE = ActiveWorkbook.Worksheets("Sheet1")Set wbE = ActiveWorkbook' 匹配Test文件ElseIf myFile Like "Test*" ThenWorkbooks.Open filePath & "\" & myFileSet wsT = ActiveWorkbook.Worksheets("Sheet1")Set wbT = ActiveWorkbookEnd IfLoop' 寫入當前時間值wsE.Cells(1, "A").Value = Now()wsT.Cells(1, "A").Value = Now()' 保存并關閉wbE.SavewbE.ClosewbT.SavewbT.CloseEnd Sub