混合单元混淆了关于单元格select的VBA代码
我有如何让用户一次只select一个单元的基本问题(已经被回答了一百次)(防止多个单元被激活)。 如果用户尝试,它会将活动selectredirect到特定的单元格(B1)。 基于快速谷歌search,智能复制和粘贴,以及一些轻微的编辑,这是我最终:
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
一个简单的代码。 然而,我遇到的问题是,无论何时我select一个合并的单元格,代码都会触发,因为根据excel,select是多个单元格。 我该如何解决这个问题? 谢谢。
我从另一个人那里inheritance了这个文件,所以已经有很多合并的单元格了。 而我的工作表是高度自动化和VBA丰富。 要求我删除所有合并的单元格(实际上)不是一个选项。
Range.MergeCells
将根据范围返回TRUE
, FALSE
或Null
- 如果范围是单个合并范围,则为
TRUE
- 如果Range仅包含未合并的单元格,则为
FALSE
-
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
Range(和Selection)对象具有MergeCells属性,它是一个布尔值,指示范围是否包含任何合并的单元格。 看文档。
这意味着您可以在继续redirectselect之前检查Selection.MergeCells
是否为True
。