Excel 检查合并单元格是否为空

Excel 检查合并单元格是否为空,excel,if-statement,merge,cells,Excel,If Statement,Merge,Cells,我有一个Excel 2003电子表格,其中混合了英国日期和货币格式的单元格。我无法更改电子表格的结构。在VBA中,在工作表更改事件期间,我想检查用户是否已从由合并单元格组成的多个范围中删除数据。我尝试过IsNull和IsEmpty,但它们在合并的单元格上不起作用。使用Range.value=“”会引发错误 更简单地说, 如果发生变更事件,并且 更改涉及一个由合并单元格和 更改是从合并的单元格中删除数据 然后 出口接头 其他的 我现有的代码包括这个。。。 如果结束 我已经阅读了很多论坛,寻找一个简

我有一个Excel 2003电子表格,其中混合了英国日期和货币格式的单元格。我无法更改电子表格的结构。在VBA中,在工作表更改事件期间,我想检查用户是否已从由合并单元格组成的多个范围中删除数据。我尝试过IsNull和IsEmpty,但它们在合并的单元格上不起作用。使用Range.value=“”会引发错误

更简单地说,

如果发生变更事件,并且 更改涉及一个由合并单元格和 更改是从合并的单元格中删除数据 然后
出口接头 其他的 我现有的代码包括这个。。。 如果结束


我已经阅读了很多论坛,寻找一个简单的解决方案,但还没有什么能解决这个问题。谢谢你的帮助。谢谢,继续努力

在处理
更改事件时,需要考虑三种情况:

  • 目标
    仅由
    未合并的
    单元格组成

  • 目标
    仅由单个
    合并的
    范围组成

  • 目标
    由一个或多个
    合并的
    范围加上零个或多个
    未合并的
    单元格组成

  • Range.MergeCells
    属性揭示了以下可能性:

  • Range.MergeCells=FALSE

  • Range.MergeCells=TRUE

  • Range.MergeCells=NULL

  • Range.MergeCells=NULL
    时,您需要分别检查
    Target
    范围中的每个单元格,以查看哪些单元格被合并

    像这样的

    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim cl As Range
    
        If IsNull(Target.MergeCells) Then
            'Changed Range contains one or more Merged cells and other cells
            For Each cl In Target.Cells
                If cl.MergeCells Then
                    ' only consider top left cell of a merged range
                    If cl.Address = cl.MergeArea.Cells(1, 1).Address Then
                        If cl = "" Then
                            MsgBox "Merged Cell Deleted " & cl.MergeArea.Address
    
                        End If
                    End If
                End If
            Next
        Else
            If Target.MergeCells Then
                ' Changed Range is a single Merged cells
                If Target.Cells(1, 1) = "" Then
                    MsgBox "Merged Cell Deleted " & Target.Address
    
                End If
            Else
                'Changed Range is Unmerged cells only
            End If
        End If
    End Sub
    

    +1,很好地解释和编码。我不需要经常处理合并的单元格,而且总是需要重新学习VBA。这很清楚。