Excel 如何在使用Selection.SpecialCells(xlCellTypeVisible)时检测未选择单元格?

Excel 如何在使用Selection.SpecialCells(xlCellTypeVisible)时检测未选择单元格?,excel,vba,error-handling,Excel,Vba,Error Handling,在我的Sub中,我使用下面的代码来获取用户选择的范围 Dim rng As范围 设置rng=Selection.SpecialCells(xlCellTypeVisible) 只要用户选择一些单元格/区域,它就可以正常工作。但是,每当调用宏而不选择任何单元格时,rng溢出,应用程序冻结。有没有办法检测用户是否未选择任何单元格并安全退出?是否选择了一个范围 If TypeOf Selection is Range Then 所选区域是否有可见单元格 On Error Resume Next“如

在我的Sub中,我使用下面的代码来获取用户选择的范围

Dim rng As范围
设置rng=Selection.SpecialCells(xlCellTypeVisible)
只要用户选择一些单元格/区域,它就可以正常工作。但是,每当调用宏而不选择任何单元格时,rng溢出,应用程序冻结。有没有办法检测用户是否未选择任何单元格并安全退出?

是否选择了一个范围

If TypeOf Selection is Range Then
所选区域是否有可见单元格

On Error Resume Next“如果选定范围内没有可见单元格,则忽略错误”
设置rng=Selection.SpecialCells(xlCellTypeVisible)
在出现错误时转到0'停止忽略错误
如果不是,那么rng什么都不是
“用rng做点什么
如果结束

我最终使用的最终解决方案

检查选择范围和计数是否大于1;使用ErrorHandler处理未选择可见单元格的情况

如果选择类型为Range和Selection.CountLarge>1,则
关于错误转到错误处理程序
设置rng=Selection.SpecialCells(xlCellTypeVisible)
错误转到0
'其他代码位
其他的
错误处理程序:
'通知用户宏仅适用于选定的2个或更多可见单元格
如果结束

为什么不使用
应用程序.InputBox
提示用户选择范围?您可以对结果使用
.SpecialCells
,而不是依赖
选择
。您的代码在
设置rng=
行失败?我只是在测试用例中隐藏了我选择的行(使其“不可见”),然后尝试了您的代码,它立即执行。我添加了
Msgbox Rng.Address
,它返回了
$2:$1048576
,因此如果选择被隐藏,您肯定会有一个很大的范围,但我没有崩溃。我觉得我们遗漏了一些重要的代码。我支持@K.Dᴀᴠɪs。隐藏某些单元格,然后仅选择一个可见单元格,将选择工作表中所有可见单元格,一直到最后一行/列。在测试
Selection
是否为
范围后,您可能还需要测试
Selection.CountLarge>1