夜雨聆风学习资料网

ARTICLE · 1018501

一键导入外部Excel!VBA文件选择器,自动提取数据到当前表

一键导入外部Excel!VBA文件选择器,自动提取数据到当前表
适用场景:点击按钮,弹出文件选择框,选中外部Excel,把第一个工作表全部数据复制粘贴到当前表(可自行修改读取哪个sheet)
特性:
1. 弹窗选择文件,不用改代码写死路径
2. 自动清空当前表原有数据(可注释关闭)
3. 关闭屏幕刷新,运行不闪烁
4. 错误捕获,文件取消/报错给出提示
5. 只复制使用区域,不复制整表,速度更快
使用方法
1. 当前Excel按  Alt + F11  打开VBA编辑器
2. 右键左侧工程 → 插入 → 模块
3. 粘贴下面代码
4. F5运行;也可以在工作表插入【按钮】指定绑定这个宏  ImportSelectFileData 
vba    
Sub ImportSelectFileData()
    Dim fd As FileDialog
    Dim filePath As String
    Dim wbSource As Workbook
    Dim wsSource As Worksheet
    Dim wsTarget As Worksheet
    Dim lastRow As Long, lastCol As Long
    ' 关闭屏幕刷新、警告,提升速度
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set wsTarget = ThisWorkbook.ActiveSheet '目标:当前激活工作表
    '创建文件选择器
    Set fd = Application.FileDialog(msoFileDialogFilePicker)
    With fd
        .Title = "请选择要导入数据的Excel文件"
        .Filters.Clear
        .Filters.Add "Excel文件", "*.xls;*.xlsx;*.xlsm", 1
        .AllowMultiSelect = False '单选文件
        If .Show <> -1 Then
            MsgBox "已取消选择文件", vbInformation
            GoTo CleanExit
        End If
        filePath = .SelectedItems(1)
    End With
    On Error GoTo ErrHandle '捕获打开文件错误
    '打开选中的源文件
    Set wbSource = Workbooks.Open(filePath)
    Set wsSource = wbSource.Sheets(1) '读取源文件【第1个工作表】,可改成 Sheets("数据")
    '获取源表最后一行、最后一列
    lastRow = wsSource.Cells(wsSource.Rows.Count, 1).End(xlUp).Row
    lastCol = wsSource.Cells(1, wsSource.Columns.Count).End(xlToLeft).Column
    '清空目标表原有内容(如果不想清空,注释掉这行)
    wsTarget.Cells.ClearContents
    '复制数据到当前表A1开始
    wsSource.Range(wsSource.Cells(1, 1), wsSource.Cells(lastRow, lastCol)).Copy
    wsTarget.Range("A1").PasteSpecial Paste:=xlPasteValues '只粘贴数值;如需格式改成 xlPasteAll
    wbSource.Close SaveChanges:=False '关闭源文件,不保存改动
    MsgBox "数据导入完成!", vbInformation
CleanExit:
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    Set fd = Nothing
    Set wbSource = Nothing
    Set wsSource = Nothing
    Set wsTarget = Nothing
    Exit Sub
ErrHandle:
    MsgBox "导入出错:" & Err.Description, vbCritical
    Resume CleanExit
End Sub
常用修改点(按需调整)
1. 读取指定工作表名字,不是第一个sheet
vba    
Set wsSource = wbSource.Sheets("数据")
2. 连同单元格格式一起复制
  xlPasteValues  →  xlPasteAll 
3. 不要清空原有数据,从A列空白行追加
删除  wsTarget.Cells.ClearContents ,粘贴起始位置改成:
vba    
Dim tarLastRow As Long
tarLastRow = wsTarget.Cells(wsTarget.Rows.Count, 1).End(xlUp).Row + 1
wsTarget.Range("A" & tarLastRow).PasteSpecial Paste:=xlPasteValues
4. 只导入指定列(例如A-C三列)
vba    
wsSource.Range("A1:C" & lastRow).Copy
日常汇总多份报表,反复打开复制粘贴很耗时间。这段VBA实现弹窗选择文件,一键把外部表格数据提取进当前工作簿。
✅ 优点:
• 可视化选择文件,不用硬编码路径
• 自带错误处理,选错文件/取消选择不会崩溃
• 支持只粘贴数值,避免带多余格式
• 可改成追加模式,多文件合并汇总
使用步骤:Alt+F11 → 插入模块粘贴代码,插入表单按钮绑定宏,点击运行。
⚠️注意:文件需要启用宏才能运行;导入前备份原表。
Excel与VBA:在公众号中解锁数据处理的无限可能
2025 AI革命:这5个工具让你的工作效率暴涨300%,最后一个你绝对想不到!

相关学习资料

返回首页浏览学习资料