如何使用VBA编写函数校验Excel单元格引用是否合法有效
问题根因
你的错误捕获语句顺序写错了:On Error Resume Next 必须放在可能抛出错误的代码行之前才能生效,原函数先执行 Range(rng).Row 再开启错误捕获,无效引用触发的运行时错误不会被拦截,直接抛出异常。
另外直接访问Range的Row属性不是最优写法,更稳妥的方案是先尝试将输入字符串赋值给Range对象,再判断对象是否存在。
修正后的实现代码
Function rangeExists(ByVal rng As String) As Boolean Dim testRng As Range ' 开启错误捕获,遇到错误直接跳转到下一行执行 On Error Resume Next Set testRng = Range(rng) On Error GoTo 0 ' 关闭错误捕获,避免影响后续代码 ' 判断对象是否成功赋值即可确定引用是否有效 rangeExists = Not testRng Is Nothing End Function
效果验证
- 输入有效引用
A1:返回True - 输入无效引用
AQ、AMQ、ZZZ9999999等不符合Excel单元格规则的字符串:返回False - 兼容Excel最大行列范围校验:Excel 2007及以后版本最大列是XFD、最大行是1048576,输入
XFD1048576返回True,输入XFE1或者1048577A都会返回False
内容的提问来源于stack exchange,提问作者MathewN
相关产品推荐
相关产品推荐

