VBA通过InputBox选择列并遍历行处理时出现类型不匹配错误的求助
VBA通过InputBox选择列并遍历行处理时出现类型不匹配错误的求助
嗨,我来帮你排查这个问题~你遇到的类型不匹配错误,核心原因是你用Application.InputBox选中的r是一整列的区域,直接用r.Value去和空字符串比较时,r.Value返回的是一个二维数组(整列所有单元格的值),不是单个单元格的数值,自然会触发类型不匹配的报错啦。
我们只需要修改循环里的操作对象,让它针对每一行的单个单元格就行,同时还能优化下循环范围让代码更灵活,修正后的代码如下:
Sub FormatRange() Dim i As Long, r As Range Set r = Application.InputBox("Pick Column", , , , , , , 8) ' 防止用户取消选择时报错 If r Is Nothing Then Exit Sub ' 遍历从第3行到选中列的最后一行 For i = 3 To r.Rows.Count ' 针对当前行的单元格判断和着色 If r.Cells(i, 1).Value <> "" Then r.Cells(i, 1).Interior.Color = vbYellow End If Next i End Sub
给你拆解下修改点:
- 把原来的
r.Value和r.Interior.Color改成r.Cells(i, 1).Value和r.Cells(i, 1).Interior.Color,这样每次循环只处理选中列里第i行的单个单元格,就不会有类型问题了。 - 增加了
If r Is Nothing Then Exit Sub的判断,要是用户点击了InputBox的取消按钮,代码会直接退出,避免抛出错误。 - 把循环的结束值从固定的1500改成
r.Rows.Count,这样不管选中的列有多少行,都会遍历到最后一行,比硬写数值更灵活。
慢慢来,新手写代码遇到这类问题很正常,多试几次就熟练啦 😊
备注:内容来源于stack exchange,提问作者DongM
相关产品推荐
相关产品推荐

