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
作为示例来回答以下问题:为什么这里会出现类型不匹配错误?++解释得很好:)