使用单元格值赋值变量时出现Run-time error 91错误求助
解决VBA "Run-time error 91" 及单元格值存储问题
错误原因分析
- 错误使用
.Select方法赋值:.Select仅执行选中单元格的操作,返回布尔值,无法直接赋值给Range或Integer类型变量,这直接导致对象变量未正确初始化,触发Run-time error 91。 - 变量类型不匹配:
var1声明为Range,但实际需要存储的是单元格值,应改为String或Variant;var2-var4为Integer,需确保对应单元格内容是整数,否则会触发类型不匹配错误。 - 依赖
ActiveCell的操作不稳定:频繁激活、选中单元格效率低且易因环境变化出错,直接通过Range引用单元格更可靠。
修正后的代码(实现核心目标)
以下代码读取源表C列起始行的数据,在目标表中找到var1对应位置后,将var2-var4填入指定区域:
Sub XPTO() Dim var1 As String ' 根据实际数据类型调整,比如用Variant兼容多种类型 Dim var2 As Integer Dim var3 As Integer Dim var4 As Integer Dim sourceRow As Long Dim targetSheet As Worksheet Dim findCell As Range ' 替换为你的目标工作表名称 Set targetSheet = ThisWorkbook.Worksheets("目标工作表") sourceRow = 4 ' 从第4行开始读取数据 ' 循环读取直到C列为空 Do While ThisWorkbook.Worksheets("源工作表").Cells(sourceRow, "C").Value <> "" ' 直接读取单元格值,无需激活/选中 var1 = ThisWorkbook.Worksheets("源工作表").Cells(sourceRow, "C").Value var2 = ThisWorkbook.Worksheets("源工作表").Cells(sourceRow, "E").Value ' 偏移2列对应E列 var3 = ThisWorkbook.Worksheets("源工作表").Cells(sourceRow, "F").Value ' 偏移3列对应F列 var4 = ThisWorkbook.Worksheets("源工作表").Cells(sourceRow, "G").Value ' 偏移4列对应G列 ' 在目标表精确查找var1 Set findCell = targetSheet.Cells.Find(What:=var1, LookIn:=xlValues, LookAt:=xlWhole) If Not findCell Is Nothing Then ' 找到后将值填入对应位置,可根据实际布局调整偏移量 findCell.Offset(0, 1).Value = var2 findCell.Offset(0, 2).Value = var3 findCell.Offset(0, 3).Value = var4 End If sourceRow = sourceRow + 1 Loop End Sub
关键说明
- 替换代码中的
"源工作表"和"目标工作表"为你实际的工作表名称。 - 若
var1存在重复项,可添加FindNext逻辑遍历所有匹配结果。 - 若单元格数据非整数,将
var2-var4的类型改为Variant或Double避免类型错误。
内容的提问来源于stack exchange,提问作者user2091010
相关产品推荐
相关产品推荐

