混合单元混淆了关于单元格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将根据范围返回TRUEFALSENull

  • 如果范围是单个合并范围,则为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