Excel VBA单击单元格以触发macros – 不处理合并单元格

我正在使用下面的代码来点击单元格时触发一个macros。 有问题的单元格是标题“米奇的macros”,但它在合并单元格B5到J5。 我已经尝试将这个合并范围命名为MITCH,但它仍然没有运行点击…任何想法? 先谢谢你!

Option Explicit Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Selection.Count = 1 Then If Not Intersect(Target, Range("MITCH")) Is Nothing Then MsgBox ("Hello World") End If End If End Sub 

问题是Selection.Count = 1。合并的单元格有多个单元格,所以一旦您select合并区域中的任何单元格,代码不会执行。

请给这个尝试…

 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not Intersect(Target, Range("MITCH")) Is Nothing Then MsgBox ("Hello World") End If End Sub 

编辑:

 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim rng As Range Set rng = Range("MITCH") If Target.CountLarge > rng.Cells.Count Then Exit Sub If Not Intersect(Target, rng) Is Nothing And Target.Cells(1).Address = rng.Cells(1).Address Then MsgBox ("Hello World") End If End Sub 

经过多一点思考,我意识到大多数答案都有一些缺点,我认为这就是我们真正的追求:

 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim rng As Range Set rng = Range("MITCH") If Target.Address = rng.MergeArea.Address Then 'check if what's selected matches the named range entirely MsgBox ("Hello World") End If End Sub 

因为这将检查您select的单元格是否完美地映射到指定的区域 – 特别是指定范围的MergeArea

匹配与Intersect只是检查select是否包含命名的范围

TL单元匹配意味着与命名范围相同的TL的任何select也将返回一个正值。 例如,如果[B2:D3]是您合并的命名范围,则如果select[B2:D3] (如所期望的),则[B2]匹配将返回正值,而且当select[B2:XX100]

这些代码只在区域相同时返回正值,即只select合并的单元格。

如果你已经命名了范围,你可以使用下面的代码

 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim tName As String On Error Resume Next tName = Target.Name.Name On Error GoTo 0 If Len(tName) > 0 Then If tName = "MITCH" Then MsgBox ("Hello World") End If End If End Sub