簡體   English   中英

Excel VBA單擊單元格以激活宏 - 不使用合並單元格

[英]Excel VBA Click Cell to Fire Macro - Not working with Merged Cells

我正在使用下面的代碼在單擊單元格時觸發宏。 有問題的單元是標題“Mitch的宏”,但它在合並的單元格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.合並的單元格有多個單元格,因此一旦選擇合並區域中的任何單元格,代碼就不會被執行。

請試一試......

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

因為這會檢查您選擇的單元格是否完美地映射到命名區域 - 特別是命名范圍的MergeArea

Intersect匹配只檢查選擇是否包含命名范圍

通過TL單元匹配意味着具有與指定范圍相同的TL的任何選擇也將返回正數。 例如,如果[B2:D3]是您合並的命名范圍,那么如果選擇[B2:D3] (如預期的那樣),則[B2]匹配將返回正數,但是當選擇[B2:XX100]也是如此

當區域相同時,此代碼僅返回正數,即僅選擇合並的單元格。

如果您已命名范圍,則可以使用以下代碼

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM