ユーザーがExcelワークシート全体を選択したかどうかを確認する方法は?以下を使ってみました。
selection.cells.count
ただし、現在の範囲外の例外が発生します。
同じことをする方法はありますか?
ユーザーがExcelワークシート全体を選択したかどうかを確認する方法は?以下を使ってみました。
selection.cells.count
ただし、現在の範囲外の例外が発生します。
同じことをする方法はありますか?
がUsedRange
vbaと同一であるかどうかをテストしたい場合は、Selection
UsedRange
が更新されていることを確認する必要があります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
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
コメントの@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!"