检查范围是不是整张纸?

时间:2012-07-27 15:07:24

标签: excel vba excel-vba excel-2007

我有这个功能试图检测特定单元格值何时发生变化。问题是,如果用户选择整个电子表格并按下删除,我的检查中会出现溢出,该范围只是一个单元格:

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

当更改单个特定单元格值时,是否有更优雅的方式可以让此代码仅运行? (没有溢出,当我清除整个工作表时出现问题等)?

2 个答案:

答案 0 :(得分:4)

我假设您使用的是Excel 2007+,因为这些版本中的行数和列数显着增加。您可能有更好的运气检查以确保行和列计数= 1,因为这些最大值将远低于两者的乘积(即,单元格数):

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

答案 1 :(得分:2)

使用CountLarge而不是Count

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

    'Code...
End Sub

请参阅:MSDN Range.CountLarge Property (Excel)