2012-07-27 133 views
1

我有這個功能,試圖檢測特定單元格值何時更改。問題是,如果用戶選擇整個電子表格並按下刪除,我得到一個溢出我的檢查範圍只是一個單細胞:檢查範圍是不是整個表?

Public Sub Worksheet_Change(ByVal Target As Range) 

    'Overflow can occur here if range = whole spreadsheet 
    If Not IsError(Int(Target.Cells.Count)) Then 
     If Target.Cells.Count = 1 Then 
      If Target.Cells.Row = 4 And Target.Cells.Column = 1 Then 
       Sheets("X").Cells(5, 1).Calculate 
      End If 
     End If 
    End If 
End Sub 

有沒有辦法,我能得到這個代碼更優雅的方式只有在單個特定單元格值更改時才運行? (沒有溢出,當我清除整個工作表等問題時出現問題)?

+0

什麼的Excel版本? – mwolfe02 2012-07-27 15:21:01

+0

2007 ........... – mezamorphic 2012-07-27 15:22:34

回答

4

我假設你在Excel 2007+中,因爲在這些版本中行和列的數量急劇增加。你可能有更好的運氣檢查,以確保行和列數都= 1,因爲這些馬克塞斯將超過兩個(即細胞計數)的產品低得多:

If Target.Rows.Count = 1 And Target.Columns.Count = 1 Then 
+0

這是充分的證據或對rows.count類型的答覆? – mezamorphic 2012-07-27 15:47:05

+0

我不明白你的問題。 – mwolfe02 2012-07-27 16:02:08

+0

這是onyl工作(和Cells.Count不工作),因爲後者使用整數,16位,最大值65,536和整個電子表格返回numbr更大? – mezamorphic 2012-07-27 16:11:32

2

使用CountLarge代替計數

Private Sub Worksheet_SelectionChange(ByVal target As Range) 
    If target.Cells.CountLarge > 1 Then Exit Sub 

    'Code... 
End Sub 

參見:MSDN Range.CountLarge Property (Excel)

相關問題