如何编写VBA过程Generate_Database实现3个xls文件导入3个工作表
Generate_Database 过程实现代码
Sub Generate_Database(SelectedFile As Variant) Dim wbSource As Workbook Dim wsTarget As Worksheet Dim i As Integer Dim fileName As String ' 关闭屏幕更新和弹窗警告,提升运行效率 Application.ScreenUpdating = False Application.DisplayAlerts = False On Error GoTo ErrHandler ' 异常捕获 ' 遍历选中的文件,最多处理3个 For i = LBound(SelectedFile) To UBound(SelectedFile) If i > 3 Then Exit For ' 提取源文件名作为工作表名,适配Excel命名规则 fileName = Mid(SelectedFile(i), InStrRev(SelectedFile(i), "\") + 1) fileName = Left(fileName, InStrRev(fileName, ".") - 1) ' 去掉文件后缀 fileName = Left(fileName, 31) ' 工作表名最多支持31个字符 ' 可选:删除已存在的同名旧工作表,不需要可删除此段 For Each wsTarget In ThisWorkbook.Worksheets If wsTarget.Name = fileName Then wsTarget.Delete Exit For End If Next ' 新建导入用的工作表 Set wsTarget = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)) wsTarget.Name = fileName ' 只读打开源文件,不修改原始数据 Set wbSource = Workbooks.Open(SelectedFile(i), ReadOnly:=True) ' 复制源文件第一个工作表的所有数据到目标表 wbSource.Worksheets(1).UsedRange.Copy Destination:=wsTarget.Range("A1") ' 关闭源文件 wbSource.Close SaveChanges:=False Next i MsgBox "导入完成,共处理" & (i - 1) & "个文件", vbInformation, "操作成功" ExitSub: ' 恢复Excel默认设置 Application.ScreenUpdating = True Application.DisplayAlerts = True Exit Sub ErrHandler: MsgBox "导入出错:" & Err.Description, vbCritical, "错误" Resume ExitSub End Sub
使用说明
- 支持1-3个文件导入,每个文件对应生成独立工作表,工作表默认使用源文件的文件名
- 默认读取源文件的第一个工作表内容,如果你需要指定读取的工作表,可以修改
wbSource.Worksheets(1)中的序号,或者替换为工作表名称,比如wbSource.Worksheets("数据页") - 如果不需要覆盖旧的导入数据,删除代码中「删除已存在的同名旧工作表」片段即可
- 全程只读打开原始文件,不会修改你原有的xls文件内容
内容的提问来源于stack exchange,提问作者Nelina
相关产品推荐
相关产品推荐

