2013-01-05 98 views
2

我有一個包含英國日期和貨幣格式化單元格的Excel 2003電子表格。我無法更改電子表格的結構。在VBA中,在工作表更改事件期間,我想檢查用戶是否已從包含合併單元格的許多範圍中刪除數據。我嘗試過IsNull和IsEmpty,但它們不能在合併的單元格上工作。使用Range.value =「」拋出一個錯誤。檢查合併的單元格是否爲空

簡單來說,

如果發生變化事件, 更改涉及包括合併單元格和 變化的範圍是從合併單元格 然後
退出小組 否則 我現有的代碼覆蓋這個數據的刪除... End if

我已經閱讀了很多論壇,只是簡單的解決方案,但沒有什麼關鍵的。感謝任何幫助。感謝並保持偉大的工作!

回答

3

當處理Change事件有三種情況你需要考慮:

  1. TargetUnmerged細胞只有

  2. Target由一個單一的Merged範圍僅

  3. Target的由一個或多個Merged範圍加零或更多0123組成個細胞

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 
+0

+1,很好地解釋和編碼。我不必經常處理合並的單元格,而必須重新學習VBA。這很清楚。 –

相關問題