我有一个基本问题(已经回答了一百次)关于如何允许用户一次只选择一个单元格(防止多个单元格处于活动状态)。如果用户尝试过,它会将活动选择重定向到特定单元格(B1)。基于快速谷歌搜索,智能复制和粘贴,以及一些轻微的编辑,这是我最终得到的:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'>> Prevent user from multiple selections
If Selection.Cells.Count > 1 Then
MsgBox "Multiple Selection Disabled, refer to B1"
ActiveSheet.Range("B1").Select
Exit Sub
End If
End Sub
一个简单的代码。但是,我遇到的问题是每当我选择一个合并的单元格时,代码就会触发,因为根据excel,选择的是多个单元格。我该如何解决这个问题?感谢。
我从另一个人那里继承了这个文件,所以已经有很多合并的单元格了。我的工作表高度自动化,VBA丰富。要求我删除所有合并的单元格(实际上)不是一个选项。
答案 0 :(得分:1)
Range(和Selection)对象具有MergeCells属性,该属性是一个布尔值,指示范围是否包含任何合并的单元格。 See the docs.
这意味着您可以在继续重定向选择之前检查Selection.MergeCells
是否为True
。
答案 1 :(得分:1)
Range.MergeCells
将返回TRUE
,FALSE
或Null
,具体取决于范围
TRUE
如果Range是单个合并范围而没有别的FALSE
如果Range仅包含非合并的单元格Null
其他任何内容,即合并范围加上一个或多个其他单元格(合并或其他)要利用这个考虑
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Target.MergeCells Or IsNull(Target.MergeCells) Then
If Target.Cells.Count > 1 Then
MsgBox "Multiple Selection Disabled, refer to B1"
Me.Cells(1, "B").Select
End If
End If
End Sub