Vba 为什么这里会出现类型不匹配错误?

Vba 为什么这里会出现类型不匹配错误?,vba,excel,Vba,Excel,我创建一个新模块并插入以下代码: 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.Co

我创建一个新模块并插入以下代码:

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
在工作表“数据”中,我有以下代码:

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
Private子工作表\u selection更改(ByVal目标作为范围)
如果Selection.CountLarge=1,则
如果不相交(Target,Range(“K:M”))为Nothing和Target.Value“”,则
“代码
如果结束
如果结束
端接头
当我运行
test()
sub时,我在
上得到一个类型不匹配错误,如果不相交(Target,Range(“K:M”))为Nothing,则作为目标错误类型

为什么会这样

为什么测试会触发更改事件?
如果手动过滤我的数据表中的列14只留下空白单元格,我不会得到同样的错误! 类型不匹配的问题在于
目标.Cells
不止一个cell。因此,
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

类型不匹配的问题是,
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

我几乎把这个问题当作一个重复的问题结束了

我将回答你的两个问题,但顺序相反,以便你能更好地理解它

为什么测试会触发更改事件

我已经解释过了

当我运行test()子函数时,我在If Not Intersect(Target,Range(“K:M”))为Nothing时得到一个类型不匹配错误,因为目标类型错误。 为什么会这样

当程序
Test
触发
工作表\u SelectionChange
事件时,代码将在线路上失败

If Not Intersect(Target, Range("K:M")) Is Nothing And Target.Value <> "" Then

我几乎把这个问题当作一个重复的问题结束了

我将回答你的两个问题,但顺序相反,以便你能更好地理解它

为什么测试会触发更改事件

我已经解释过了

当我运行test()子函数时,我在If Not Intersect(Target,Range(“K:M”))为Nothing时得到一个类型不匹配错误,因为目标类型错误。 为什么会这样

当程序
Test
触发
工作表\u SelectionChange
事件时,代码将在线路上失败

If Not Intersect(Target, Range("K:M")) Is Nothing And Target.Value <> "" Then


如果您尝试使用
工作表(“数据”).Range(“K:M”)
而不是
Range(“K:M”)
,会发生什么情况?为什么
test
会触发
Change
事件?我可以建议您在问题中添加您希望代码执行的操作吗?另外,
wbT
test()
中没有定义?我想知道
特殊单元格(xlCellTypeBlanks)
是否会触发工作表上的筛选器。。。如果手动过滤数据页的列14只留下空白单元格,是否也会得到同样的错误?@汤姆<代码>。选择的是空白单元格。我在30秒前就知道了:p如果你尝试
工作表(“数据”).Range(“K:M”)
而不是
Range(“K:M”)
,会发生什么情况?为什么
测试
会触发
更改
事件?我可以建议你在你的问题中添加你希望代码执行的操作吗?另外,
wbT
test()
中没有定义?我想知道
特殊单元格(xlCellTypeBlanks)
是否会触发工作表上的筛选器。。。如果手动过滤数据页的列14只留下空白单元格,是否也会得到同样的错误?@汤姆<代码>。选择的是空白单元格。我在30秒前就知道了:P为了安全起见,我建议使用
Target.Cells.CountLarge
。@Storax-更安全,是的。我不需要在这里计数,并从其他方面触发变更事件function@DmitrijHolkin-使用
.CountLarge
作为一个示例来回答以下问题:为什么这里会出现类型不匹配错误?++解释得很好:)为了安全起见,我可以建议使用
Target.Cells.CountLarge
。@Storax-这样更安全,是的,我不需要在这里计数,也不需要从其他位置触发更改事件function@DmitrijHolkin-使用
.CountLarge
作为示例来回答以下问题:为什么这里会出现类型不匹配错误?++解释得很好:)