[英]Why am I getting a type mismatch error here?
我创建一个新模块并插入以下代码:
Sub test()
Set wsData = ThisWorkbook.Worksheets("Data")
sCount = wsData.Columns(14).SpecialCells(xlCellTypeBlanks).Count
msgbox sCount
End Sub
在工作表“数据”中,我有以下代码:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Selection.CountLarge = 1 Then
If Not Intersect(Target, Range("K:M")) Is Nothing And Target.Value <> "" Then
'code
End if
End if
End Sub
当我运行test()
子If Not Intersect(Target, Range("K:M")) Is Nothing
, If Not Intersect(Target, Range("K:M")) Is Nothing
收到类型不匹配错误,因为Target错误类型。
为什么会这样呢?
为什么测试触发变更事件? 如果手动过滤数据表的第14列以仅保留空白单元格,则不会出现相同的错误!
类型不匹配的问题是Target.Cells
超过一个单元。 因此, Target.Value <> ""
引发类型不匹配,因为不能将多个单元格与""
进行比较。 请参阅MsgbBox
以及单元格数:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Selection.CountLarge = 1 Then
If Target.Cells.CountLarge > 1 Then MsgBox Target.Cells.CountLarge
If Not Intersect(Target, Range("K:M")) Is Nothing And Target.Value <> "" Then
'code
End If
End If
End Sub
根据业务逻辑,可能有几种解决方案。
最简单的方法是编写If Target.Cells.CountLarge > 1 Then Exit Sub
在_SelectionChange
事件中If Target.Cells.CountLarge > 1 Then Exit Sub
。
另一种方法是禁用周围的事件
sCount = wsData.Columns(14).SpecialCells(xlCellTypeBlanks).Count
像这样:
Sub TestMe()
Set wsData = ThisWorkbook.Worksheets("Data")
Application.EnableEvents = False
sCount = wsData.Columns(14).SpecialCells(xlCellTypeBlanks).Count
Application.EnableEvents = True
msgbox sCount
End Sub
我几乎把这个问题重复了一下。
我会以相反的顺序回答您的两个问题,以便您更好地理解。
为什么测试触发变更事件?
我已经在导致Excel 2010中的SheetSelectionChange事件的SpecialCells中对此进行了解释
当我运行test()子程序时,如果目标不正确,则在If Not Intersect(Target,Range(“ K:M”))Nothing上收到类型不匹配错误。 为什么会这样呢?
当Test
过程触发Worksheet_SelectionChange
事件时,您的代码将失败
If Not Intersect(Target, Range("K:M")) Is Nothing And Target.Value <> "" Then
这是因为Target.Value <> ""
是SpecialCells(xlCellTypeBlanks).Count
的罪魁祸首SpecialCells(xlCellTypeBlanks).Count
可能返回多个单元格。
如果您将上述行分为两行,则不会出现错误
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells.CountLarge > 1 Then Exit Sub
If Not Intersect(Target, Range("K:M")) Is Nothing Then
If Target.Value <> "" Then
'code
End If
End If
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.