我有一个包含英国日期和货币格式单元格的Excel 2003电子表格。我无法更改电子表格的结构。在VBA中,在工作表更改事件期间,我想检查用户是否已从包含合并单元格的多个范围中删除了数据。我尝试过IsNull和IsEmpty,但它们不适用于合并的单元格。使用Range.value =“”会引发错误。
简单来说;
如果发生更改事件AND
该变化涉及由合并的单元格AND组成的范围
更改是从合并的单元格中删除数据
然后
退出子
其他
我现有的代码涵盖了这个......
如果
为了一个简单的解决方案,我已经阅读了很多广泛的论坛,但没有什么可以解决的。感谢任何帮助。谢谢,并保持伟大的工作!!
答案 0 :(得分:3)
处理Change
事件时,您需要考虑三种情况:
Target
仅由Unmerged
个单元格
Target
仅包含一个Merged
范围
Target
包含一个或多个Merged
范围以及零个或多个Unmerged
个单元格
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