Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查是否选择了整个工作表?_C#_Visual Studio_Excel_Vsto_Vba - Fatal编程技术网

C# 检查是否选择了整个工作表?

C# 检查是否选择了整个工作表?,c#,visual-studio,excel,vsto,vba,C#,Visual Studio,Excel,Vsto,Vba,如何检查用户是否选择了整个excel工作表?。 我试着用下面的方法 selection.cells.count 但它给出了一个超出当前范围的例外 有没有办法做到这一点?如果您想测试UsedRange是否与当时的选择一致 您需要确保UsedRange已更新 如果没有范围选择,也需要考虑错误 像这样的东西也可以 错误的警告消息没有选择 对于相同的地址字符串,为True 对于不同的地址字符串为False 代码 我将剽窃brettdj的代码,并创建一个版本来测试是否选中了整个表单。虽然我对他使用字符串

如何检查用户是否选择了整个excel工作表?。 我试着用下面的方法

selection.cells.count
但它给出了一个超出当前范围的例外


有没有办法做到这一点?

如果您想测试UsedRange是否与当时的选择一致

您需要确保UsedRange已更新 如果没有范围选择,也需要考虑错误 像这样的东西也可以

错误的警告消息没有选择 对于相同的地址字符串,为True 对于不同的地址字符串为False 代码


我将剽窃brettdj的代码,并创建一个版本来测试是否选中了整个表单。虽然我对他使用字符串来包含真、假和失败值很感兴趣,但我还是选择布尔值,这样像我这样的人就不必太费劲了

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

正如@TimWilliams在注释中指出的,如果选择整个工作表,计数将溢出一个int,即count属性,导致超出当前范围异常。要绕过此问题,请使用CountLarge属性。在C语言中,CountLarge属性是一个对象。要使用它,请将其放置在一个较长的位置

long cellCount = (long)selectedRange.Cells.CountLarge;

我意识到这是一个古老的讨论,但我来自谷歌搜索。对于其他任何人来说,更简单的方法可能就是使用.address。比如说

If Selection.address = Cells.address then Msgbox "You selected an entire sheet!"

2.你是指整个工作表,还是整个工作表的使用部分?.CountLarge可用于Tim Williams提出的Excel 2007+良好观点。尽管有人选择了正确的使用范围这一想法对我来说似乎很奇怪。可能交叉的电线:
If Selection.address = Cells.address then Msgbox "You selected an entire sheet!"