在此之前,我已经知道如何创建该代码,以确定要在其中实现函数的特定数组:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("A1:O7000")) Is Nothing Then
MsgBox "Hi"
End If
End Sub因此,只有当我在 Range函数中编写时,才能在这里使用。我不想决定整个数组。当我想按照这个形状来开发这个代码时:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim SafeTbl As ListObject
Set SafeTbl = ListObjects("Safe")
If Not Intersect(Target, SafeTbl.Range.Address) Is Nothing Then
MsgBox "Hi"
End If
End Sub我发现这个Type mismatch编译错误:

我不知道为什么这个错误存在。当我看到我的开发和以前的代码一样时。,因为这段代码只确定数组有数据。
发布于 2021-07-02 15:02:13
正如注释中所建议的,.Address是一个字符串。Intersect要求范围作为参数,而不是当前提供的范围地址的文本。
Type mismatch编译错误告诉您“变量或属性不是正确的类型”(https://learn.microsoft.com/en-us/office/vba/language/reference/user-interface-help/type-mismatch-error-13)
微软说:
Application.Intersect方法(Excel)返回一个Range对象,该对象表示两个或多个区域的矩形相交。
为了明确起见,这意味着您的代码需要更改为:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim SafeTbl As ListObject
Set SafeTbl = ListObjects("Safe")
If Not Intersect(Target, SafeTbl.Range) Is Nothing Then
MsgBox "Hi"
End If
End Sub有关Intersect的更多信息,请在这里阅读:https://learn.microsoft.com/en-us/office/vba/api/excel.application.intersect
还有更多关于Range属性的信息:https://learn.microsoft.com/en-us/office/vba/api/excel.range.range
更新
正如@BigBen正确指出的那样,在您的示例中,我们实际上是指ListObject.Range属性,因此有关此属性的进一步信息如下:https://learn.microsoft.com/en-us/office/vba/api/excel.listobject.range
https://stackoverflow.com/questions/68226790
复制相似问题