从指定路径导入CSV至Excel不同工作表(每日覆盖更新)
修改后的VBA代码:指定路径自动导入CSV并覆盖数据
以下代码替换了原手动选择文件的逻辑,改为指定固定文件夹路径,自动遍历CSV文件并覆盖对应工作表的数据(文件名与工作表名保持一致):
Sub AutoImportCsvToSheets() Dim csvFolderPath As String Dim csvFileName As String Dim targetWb As Workbook Dim targetWs As Worksheet Dim tempWb As Workbook Dim screenUpdatingState As Boolean ' -------------------------- ' 请修改为你的CSV文件所在文件夹路径 csvFolderPath = "C:\YourCSVFiles\" ' -------------------------- On Error GoTo ErrHandler screenUpdatingState = Application.ScreenUpdating Application.ScreenUpdating = False Set targetWb = ThisWorkbook ' 当前运行代码的工作簿作为目标工作簿 ' 遍历文件夹下所有CSV文件 csvFileName = Dir(csvFolderPath & "*.csv") Do While csvFileName <> "" ' 打开CSV文件 Set tempWb = Workbooks.Open(csvFolderPath & csvFileName, Local:=True) ' 获取目标工作表名(去掉.csv后缀) Dim wsName As String wsName = Left(csvFileName, Len(csvFileName) - 4) ' 检查目标工作表是否存在 On Error Resume Next Set targetWs = targetWb.Worksheets(wsName) On Error GoTo ErrHandler If targetWs Is Nothing Then ' 不存在则新建工作表 Set targetWs = targetWb.Worksheets.Add(After:=targetWb.Worksheets(targetWb.Worksheets.Count)) targetWs.Name = wsName Else ' 存在则清空现有数据 targetWs.Cells.Clear End If ' 将CSV数据复制到目标工作表 tempWb.Worksheets(1).UsedRange.Copy Destination:=targetWs.Range("A1") ' 关闭CSV文件,不保存 tempWb.Close SaveChanges:=False Set tempWb = Nothing Set targetWs = Nothing ' 下一个CSV文件 csvFileName = Dir Loop MsgBox "CSV文件导入完成!", vbInformation, "提示" ExitHandler: Application.ScreenUpdating = screenUpdatingState Set targetWb = Nothing Exit Sub ErrHandler: MsgBox "导入出错:" & Err.Description, vbCritical, "错误" Resume ExitHandler End Sub
关键改动说明
- 指定固定路径:通过
csvFolderPath变量设置CSV文件所在文件夹,无需手动选择 - 自动覆盖数据:检查对应工作表是否存在,存在则清空原有内容后导入新数据;不存在则新建工作表
- 保持文件名与工作表名一致:自动提取CSV文件名(去掉
.csv后缀)作为工作表名称 - 高效运行:关闭屏幕刷新,避免操作过程中的闪烁,提升运行速度
使用注意事项
- 把代码中的
csvFolderPath = "C:\YourCSVFiles\"修改为你实际的CSV文件夹路径 - 确保CSV文件名不含Excel工作表名的非法字符(如
/ \ : * ? " < > |) - 运行代码前,建议先备份目标工作簿,避免意外数据丢失
内容的提问来源于stack exchange,提问作者user21167295
相关产品推荐
相关产品推荐

