2

ユーザーがExcelワークシート全体を選択したかどうかを確認する方法は?以下を使ってみました。

selection.cells.count

ただし、現在の範囲外の例外が発生します。

同じことをする方法はありますか?

4

4 に答える 4

3

UsedRangevbaと同一であるどうかをテストしたい場合は、Selection

  1. UsedRangeが更新されていることを確認する必要があります
  2. 範囲の選択がない場合のエラーへの対応も必要です

thsのようなものはどちらかを与えます

  • エラーの警告メッセージ(選択なし)
  • 同じ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

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 に答える
1

コメントの@TimWilliamsで指摘されているように、ワークシート全体を選択すると、カウントがint(つまりCountプロパティ)をオーバーフローし、「現在の範囲外」の例外が発生します。これを回避するには、CountLargeプロパティを使用します。C#では、CountLargeプロパティはオブジェクトです。使用するには、ロングキャストしてください。

long cellCount = (long)selectedRange.Cells.CountLarge;
于 2013-03-14T14:22:31.777 に答える
0

これは古い議論だと思いますが、私はグーグル検索からここに来ました。これを見つけた他の人にとって、より簡単な方法はおそらく「.address」を使用することでしょう。例えば

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