Excel VBA查找含%符号单元格时出现Run Time Error 91的解决问询
Excel VBA Run Time Error 91 解决思路
错误原因
Run Time Error 91 是因为Find方法未找到匹配项、返回了Nothing,你直接访问.Row属性触发了错误。根本问题在于:Find默认查找的是单元格的实际值,而非格式化后的显示文本。你给D4设置了NumberFormat = "0.00\%",让它显示为80.00%,但单元格实际值是80(由(4/5)*100计算得出),所以Find(What:="%")找不到任何匹配项。
解决方案
根据你的需求,分两种场景处理:
场景1:查找应用了百分比格式的单元格
如果你要找的是设置了百分比格式的行,不用搜索%符号,直接匹配单元格格式:
Dim a As Integer Dim b As Integer Dim i As Integer Dim foundCell As Range a = 4 b = 5 Worksheets(1).Range("D4") = (a / b) * 100 Worksheets(1).Range("D4").NumberFormat = "0.00\%" ' 设置查找的格式 Application.FindFormat.NumberFormat = "0.00\%" ' 查找应用该格式的单元格 Set foundCell = Worksheets(1).Range("D:D").Find(What:="", _ After:=Worksheets(1).Range("D1"), _ LookAt:=xlPart, _ SearchDirection:=xlNext, _ SearchFormat:=True) ' 先判断是否找到再赋值 If Not foundCell Is Nothing Then i = foundCell.Row Worksheets(1).Range("A1") = i Else MsgBox "未找到应用百分比格式的单元格" End If ' 重置查找格式,避免影响后续操作 Application.FindFormat.Clear
场景2:查找值中包含%的文本型单元格
如果你确实需要单元格值本身带有%(比如文本类型的80%),修改写入方式即可:
Dim a As Integer Dim b As Integer Dim i As Integer Dim foundCell As Range a = 4 b = 5 ' 直接写入带%的文本,而非数值加格式 Worksheets(1).Range("D4") = (a / b) * 100 & "%" ' 查找包含%的单元格 Set foundCell = Worksheets(1).Range("D:D").Find(What:="%", _ After:=Worksheets(1).Range("D1"), _ LookAt:=xlPart, _ SearchDirection:=xlNext) If Not foundCell Is Nothing Then i = foundCell.Row Worksheets(1).Range("A1") = i Else MsgBox "未找到包含%的单元格" End If
关键注意事项
- 永远先检查Find结果:用
If Not foundCell Is Nothing Then判断是否找到匹配项,再访问.Row等属性,避免Error 91。 - 明确工作表引用:原代码中
After:=Range("D1")未指定工作表,可能引用当前活动表的单元格,最好写成After:=Worksheets(1).Range("D1"),避免歧义。
内容的提问来源于stack exchange,提问作者tueftla
相关产品推荐
相关产品推荐

