在Excel 2007中,我想在单击单元格(L2)时提示消息。我有一段可行的代码,但问题是,当我使用Ctrl+A
选择工作表中的所有单元格时,我会在06: overflow
行上获得错误编号If Selection.Count = 1 Then
强制性VBA代码:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Selection.Count = 1 Then
If Not Intersect(Target, Range("L2")) Is Nothing Then
MsgBox "ACTION!"
End If
End If
End Sub
答案 0 :(得分:6)
轻松修复:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Selection.CountLarge = 1 Then
If Not Intersect(Target, Range("L2")) Is Nothing Then
MsgBox "ACTION!"
End If
End If
End Sub
答案 1 :(得分:2)
试试这个:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If InStr(1, CStr(Target.Address), ":") < 1 Then
If Selection.Count = 1 Then
If Not Intersect(Target, Range("L2")) Is Nothing Then
MsgBox "ACTION!"
End If
End If
End If
End Sub
答案 2 :(得分:0)
您必须按如下方式更改代码。不需要错误陷阱: Private Sub Worksheet_SelectionChange(ByVal Target As Range) 如果Selection.Area.Count = 1那么 如果不相交(目标,范围(“L2”))则没有 MsgBox“行动!” 万一 万一 结束子
答案 3 :(得分:0)
如果您使用64位Excel,我会告诉您使用CountLarge
而不是Count
。 Excel 2007仅提供32位版本,因此这不是您的选择。
您的问题是Range.Count
返回一个Long
变量,并且如果单元格的数量大于Long
可以存储的单元数,则会引发错误。
要解决此问题,您可以执行以下操作:
使用存储在Decimal
内的Variant
数据类型。在Excel工作表中,组合的数量可以超过1,048,576行x 16,384列的单元格。
一次将单元格计数为一列,以免发生Range.Count
错误。
我写了一个函数来做到这一点。将此功能保存在常规代码模块(而不是工作表或工作簿模块)中,并按以下方式使用它:
If CountLarge32(Selection) = 1 Then
这是实际功能:
Public Function CountLarge32(ByVal rangeOrSelection As Variant) As Variant
Dim target As Excel.Range
On Error Resume Next
Set target = rangeOrSelection
On Error GoTo 0
Dim cnt As Variant
Dim iColumn As Excel.Range
If Not target Is Nothing Then ' parameter -IS- a valid Range
' Use Range.Count on one column at a time to avoid the overflow error
' if counting higher than the limit of the Long data type.
For Each iColumn In target.Columns
cnt = CDec(cnt + iColumn.Cells.Count)
Next iColumn
CountLarge32 = cnt
End If
End Function
此功能还可以避免“选择”是对象(例如按钮,形状,图表等)而不是单元格时发生的错误。