VBA新手使用Find方法查找值后存储对应行号问题求助
问题排查与修正方案
核心错误点
- 变量类型定义错误:
FoundRow用于存储行号(数值类型),不应该声明为Range对象类型 - 赋值语法错误:只有给对象类型变量赋值才需要用
Set关键字,数值类型变量直接赋值即可 - 缺失容错判断:如果
Find方法未匹配到对应值,FoundCell会返回Nothing,直接调用.Row会触发运行时错误
修正后代码
Sub UpdateQuote() Dim wb As Workbook Dim ws As Worksheet Dim FoundCell As Range ' 调整FoundRow为Long类型,存储行号数值,避免Integer范围不足触发溢出 Dim FoundRow As Long Dim FindValue As String Set wb = ActiveWorkbook Set ws = ActiveSheet FindValue = Sheet24.Range("D3") ' 补充Find参数,避免默认参数变化导致匹配异常 Set FoundCell = Sheet20.Range("A:A").Find(What:=FindValue, LookIn:=xlValues, LookAt:=xlWhole) ' 先判断是否找到匹配值再取行号 If Not FoundCell Is Nothing Then ' 数值类型直接赋值,不需要Set关键字 FoundRow = FoundCell.Row MsgBox FoundRow ' 后续逻辑可以直接调用FoundRow变量 Else MsgBox "未找到匹配值:" & FindValue ' 可在此处补充未找到时的处理逻辑 End If Application.ScreenUpdating = False End Sub
额外优化说明
Find方法补充的LookAt:=xlWhole代表完全匹配,不需要完全匹配可以改为xlPart- 查找区域建议限制为实际使用的单元格范围,代替整列
A:A,可提升代码运行效率
内容的提问来源于stack exchange,提问作者rit150
相关产品推荐
相关产品推荐

