合并单元格弄乱了关于单元格选择的VBA代码

时间:2017-03-01 01:10:48

标签: excel excel-vba vba

我有一个基本问题(已经回答了一百次)关于如何允许用户一次只选择一个单元格(防止多个单元格处于活动状态)。如果用户尝试过,它会将活动选择重定向到特定单元格(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丰富。要求我删除所有合并的单元格(实际上)不是一个选项。

2 个答案:

答案 0 :(得分:1)

Range(和Selection)对象具有MergeCells属性,该属性是一个布尔值,指示范围是否包含任何合并的单元格。 See the docs.

这意味着您可以在继续重定向选择之前检查Selection.MergeCells是否为True

答案 1 :(得分:1)

Range.MergeCells将返回TRUEFALSENull,具体取决于范围

  • 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