首页 > 解决方案 > 为什么我在这里收到类型不匹配错误?

问题描述

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

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()sub 时,我得到一个类型不匹配错误If Not Intersect(Target, Range("K:M")) Is Nothing,作为目标错误类型。

为什么会这样?

为什么测试会触发变更事件?如果手动过滤我的数据表的第 14 列以仅留下空白单元格,我不会收到相同的错误!

标签: vbaexcel

解决方案


类型不匹配的问题在于Target.Cells不止一个单元格。因此,Target.Value <> ""throws 类型不匹配,因为无法将多个单元格与"". 看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事件中写入 。

  • 另一种方法是禁用周围的事件

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

推荐阅读