2

如何检查用户是否选择了整个 Excel 工作表?我曾尝试使用以下。

selection.cells.count

但它给出了超出当前范围的异常。

有没有办法做同样的事情?

4

4 回答 4

3

如果您想测试是否UsedRangeSelectionin ,那么

  1. 您需要确保UsedRange已更新
  2. 如果没有范围选择,也需要处理错误

像这样的东西给了

  • 错误警告消息(无选择)
  • 对于相同的Address字符串为真
  • Address对不同的字符串为 False

代码

Sub TestData()
Dim strTest As String
'force usedrange to update
ActiveSheet.UsedRange
On Error Resume Next
strTest = (ActiveSheet.UsedRange.Address = Selection.Address)
On Error GoTo 0
If Len(strTest) = 0 Then
MsgBox "test failed: have you selected part of the sheet", vbCritical
Else
MsgBox strTest
End If
End Sub
于 2012-11-06T05:25:52.433 回答
1

正如@TimWilliams 在评论中指出的那样,如果您选择整个工作表,则计数将溢出一个 int (即Count属性),从而导致“超出当前范围”异常。要解决这个问题,请使用该CountLarge属性。在 C# 中,CountLarge属性是一个对象。要使用它,请将其投射到很长的位置。

long cellCount = (long)selectedRange.Cells.CountLarge;
于 2013-03-14T14:22:31.777 回答
1

我将抄袭brettdj的代码并创建一个版本来测试是否选择了整个工作表。虽然我对他使用字符串来包含 TRUE、FALSE 和失败值很感兴趣,但我只会使用布尔值,这样像我这样的人就不必想太多了。

Sub CheckSelection()
Dim IsMatch As Boolean
Dim ErrNum As Long

With ActiveSheet
    On Error Resume Next
    IsMatch = (.Range(.Cells(1), .Cells(.Rows.Count, Columns.Count)).Address = Selection.Address)
    ErrNum = Err.Number
    On Error GoTo 0
    If ErrNum <> 0 Then
        MsgBox "test failed: have you selected part of the sheet", vbCritical
    Else
        MsgBox IsMatch = True
    End If
End With
End Sub
于 2012-11-06T06:03:31.150 回答
0

我意识到这是一个古老的讨论,但我是通过谷歌搜索来到这里的。对于发现此问题的任何其他人,更简单的方法可能就是使用“.address”。例如

If Selection.address = Cells.address then Msgbox "You selected an entire sheet!"
于 2016-01-05T16:40:33.550 回答