下标超出范围/listobject 存在但未找到

Subscript out of range / listobject exists but not found

我想在最后一行填满我的列表对象时自动添加一行。但是 listobject 在 if 语句中没有被识别,当我将变量 tbl 设置为 listobject 时,它说下标超出范围。

With Sheets("Ruimtelijst")
    lastRow = .Cells(Cells.Rows.Count, "G").End(xlUp).Row
End With
    For Row= 4 To lastRow
        With Sheets("Uitwendige scheidingen")
'Intersect is not working either.
            'If Not Intersect(Target, .ListObjects("Table_" & Row - 3)) Is Nothing Then
            Set tbl = .ListObjects("Table_" & Row - 3)
            'End If
         End With
    Next

添加列表行的代码:(在另一个模块中)

Set tbl= .ListObjects.Add(xlSrcRange, Source:=.Range("F" & NextRow + 11 & ":G" & NextRow + 11), XlListObjectHasHeaders:=xlYes)
tbl.Name = "Table " & Rij - 3

如您所见。在 excel 中添加了 listobject:(GrondWand 是原来的 table 名称,此处将其更改为英文)

我试过:

也许您可以根据自己的需要进行调整?再一次,我不确定你到底想要什么,所以我尽可能地写了它。


Sub test()

    'Goes through all sheets
For i = 1 To ThisWorkbook.Sheets.Count
        'And through all listobjects on those sheets.
    For j = 1 To ThisWorkbook.Sheets(i).ListObjects.Count
            'Just for your info: to see names and references?
        Debug.Print "Sheet, Listobject number and its name: " & i & " " & j & " " & ThisWorkbook.Sheets(i).ListObjects(j).Name
            'Find the last row
        LastRowOfThisListObject = ThisWorkbook.Sheets(i).ListObjects(j).DataBodyRange.Rows.Count
            'If that row (first column) is not empty then
        If Not ThisWorkbook.Sheets(i).ListObjects(j).Range(LastRowOfThisListObject, 1) Like "" Then
                'Add another empty row below
            ThisWorkbook.Sheets(i).ListObjects(j).ListRows.Add

                'If you also want to write to it go with this:
'            With ThisWorkbook.Sheets(i).ListObjects(j).ListRows.Add
'                .Range.ClearFormats
'                .Range(1, 1) = " "
'                .Range(1, 2) = " "
'                .Range(1, 3) = " "
'                etc.
'                Call OtherSub(.Range) '...for example
'            End With

        End If
    Next
Next

End Sub

编辑以回答后续问题。 这对我有用:

Sub test2()

Set target = ThisWorkbook.Sheets(1).Range("A1:D5")
'The table is in Range("B4:I15")
Row = 4

With Sheets(1)
If Not Intersect(target, .ListObjects("Tabelle" & Row - 3).Range) Is Nothing Then
    Debug.Print "test"
End If
End With

End Sub

PS:用你展示的有限代码很难猜到你在哪里定义了什么。我刚刚做了一个 table 并定义了一些范围来测试它。我认为您的错误是缺少 .range。希望大家可以根据需要进行调整