VBA运行时错误13:类型不匹配问题求助(数据粘贴场景)
解决VBA Runtime Error 13: 类型不匹配问题
先直接点出核心问题:你的代码里的ShSummary变量是引发类型不匹配错误的关键,下面分两种常见情况分析并给出修复方案:
1. 最可能的原因:ShSummary未定义或未赋值
看你的代码,既没有声明ShSummary的变量类型,也没有给它赋值具体的工作表名称。如果你的VBA项目没有开启Option Explicit(默认状态可能未开启),VBA会把ShSummary当成一个未初始化的变体变量,值为空。而Worksheets()方法接收的参数只能是工作表名称(字符串)或工作表索引(数字),传入空值自然会触发类型不匹配错误。
修复代码示例:
Sub Import_Data() Dim FilePth As String Dim SourceBook As Workbook Dim LastCell_Nbr As Long ' 改成Long,避免行数超过32767时溢出 Dim ShSummary As String ' 声明为字符串变量,存储汇总表名称 ' 替换成你实际的汇总工作表名称 ShSummary = "汇总表" FilePth = "C:\Users\xxx\Desktop\xxx\xxx\Follow-up_File.xlsm" Set SourceBook = Application.Workbooks.Open(FilePth) ' 先判断工作表是否处于筛选状态,避免ShowAllData报错 If SourceBook.Sheets("Follow up").FilterMode Then SourceBook.Sheets("Follow up").ShowAllData End If LastCell_Nbr = SourceBook.Sheets("Follow up").Cells(Rows.Count, "C").End(xlUp).Row ' 修复后的复制粘贴语句,明确指定Destination参数 SourceBook.Sheets("Follow up").Range("A5:A" & LastCell_Nbr).Copy _ Destination:=ThisWorkbook.Worksheets(ShSummary).Range("B5") End Sub
2. 如果ShSummary是工作表对象(而非名称)
如果你原本打算把ShSummary定义为工作表对象,那需要用Set语句赋值,并且引用方式要调整:
Sub Import_Data() Dim FilePth As String Dim SourceBook As Workbook Dim LastCell_Nbr As Long Dim ShSummary As Worksheet ' 声明为工作表对象类型 ' 直接绑定汇总表对象 Set ShSummary = ThisWorkbook.Worksheets("汇总表") FilePth = "C:\Users\xxx\Desktop\xxx\xxx\Follow-up_File.xlsm" Set SourceBook = Application.Workbooks.Open(FilePth) If SourceBook.Sheets("Follow up").FilterMode Then SourceBook.Sheets("Follow up").ShowAllData End If LastCell_Nbr = SourceBook.Sheets("Follow up").Cells(Rows.Count, "C").End(xlUp).Row ' 直接通过对象引用Range,无需再调用Worksheets() SourceBook.Sheets("Follow up").Range("A5:A" & LastCell_Nbr).Copy _ Destination:=ShSummary.Range("B5") End Sub
额外优化建议
- 开启
Option Explicit:在模块顶部添加这行代码,强制声明所有变量,能提前发现这类未定义变量的隐性错误。 - 避免依赖
ActiveSheet:直接指定具体工作表(比如SourceBook.Sheets("Follow up")),防止当前激活的工作表不是目标表引发意外。 - 用值传递替代复制粘贴(更高效):如果不需要复制格式,直接赋值单元格值会更快:
ShSummary.Range("B5:B" & (5 + LastCell_Nbr - 5)).Value = SourceBook.Sheets("Follow up").Range("A5:A" & LastCell_Nbr).Value
内容的提问来源于stack exchange,提问作者Hannah




