使用Evaluate函数获取单元格列号时出现类型不匹配错误求助
解决VBA运行时错误13:类型不匹配问题
你遇到的错误根源在于用Evaluate函数获取列号的写法冗余且易出问题,其实VBA自带单元格列号属性,完全不需要绕弯用Evaluate。
修正方案
直接使用Cells(i,j).Column获取列号,这是VBA内置的可靠属性,效率更高且不会触发类型不匹配:
Sub search() Dim whe As Integer Dim lrow As Long Dim i As Long, j As Integer ' 声明所有变量避免隐式类型问题 lrow = ActiveSheet.Cells(Rows.Count, "C").End(xlUp).Row For i = 2 To lrow For j = 3 To 4 If Cells(i, j).Value = Range("G2").Value Then whe = Cells(i, j).Column ' 直接获取列号,替代Evaluate If whe = 3 Then ' 写入你的业务逻辑代码 End If End If Next j Next i End Sub
额外说明
- 原代码中
lrow未声明类型,建议声明为Long(Excel行数上限远大于Integer的32767),避免溢出错误。 - 若坚持要用
Evaluate,需确保返回值为有效数字,可增加错误判断:
Dim evalResult As Variant evalResult = Evaluate("=COLUMN(" & Cells(i, j).Address & ")") If IsNumeric(evalResult) Then whe = evalResult End If
但这种写法完全没必要,优先使用Column属性。
内容的提问来源于stack exchange,提问作者nicktrent
相关产品推荐
相关产品推荐

