2

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

简而言之;

如果发生更改事件并且更改涉及由合并单元格组成的范围并且更改是从合并单元格中删除数据然后
退出子否则我现有的代码涵盖了这个...结束如果

我已经阅读了广泛的论坛以获得一个简单的解决方案,但还没有任何技巧。感谢任何帮助。谢谢并继续努力!!

4

1 回答 1

3

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

  1. Target仅由Unmerged细胞组成

  2. Target仅包含一个Merged范围

  3. Target由一个或多个Merged范围加上零个或多个Unmerged单元格组成

这些Range.MergeCells属性揭示了这些可能性:

  1. Range.MergeCells = FALSE

  2. Range.MergeCells = TRUE

  3. 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
于 2013-01-05T02:35:20.423 回答