如何检查用户是否选择了整个 Excel 工作表?我曾尝试使用以下。
selection.cells.count
但它给出了超出当前范围的异常。
有没有办法做同样的事情?
如何检查用户是否选择了整个 Excel 工作表?我曾尝试使用以下。
selection.cells.count
但它给出了超出当前范围的异常。
有没有办法做同样的事情?
如果您想测试是否UsedRange
与Selection
in vba 相同,那么
UsedRange
已更新像这样的东西给了
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
正如@TimWilliams 在评论中指出的那样,如果您选择整个工作表,则计数将溢出一个 int (即Count
属性),从而导致“超出当前范围”异常。要解决这个问题,请使用该CountLarge
属性。在 C# 中,CountLarge
属性是一个对象。要使用它,请将其投射到很长的位置。
long cellCount = (long)selectedRange.Cells.CountLarge;
我将抄袭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
我意识到这是一个古老的讨论,但我是通过谷歌搜索来到这里的。对于发现此问题的任何其他人,更简单的方法可能就是使用“.address”。例如
If Selection.address = Cells.address then Msgbox "You selected an entire sheet!"