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

时间:2013-01-05 01:14:57

标签: excel if-statement merge cells

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

简单来说;

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

结束

为了一个简单的解决方案,我已经阅读了很多广泛的论坛,但没有什么可以解决的。感谢任何帮助。谢谢,并保持伟大的工作!!

1 个答案:

答案 0 :(得分:3)

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

  1. Target仅由Unmerged个单元格

  2. 组成
  3. Target仅包含一个Merged范围

  4. Target包含一个或多个Merged范围以及零个或多个Unmerged个单元格

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

    1. Range.MergeCells = FALSE

    2. Range.MergeCells = TRUE

    3. Range.MergeCells = NULL

    4. 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