下标超出范围/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 名称,此处将其更改为英文)
我试过:
将Sheets("Uitwendige scheidingen")
更改为Sheets(Sheet2)
(显然Sheet2不存在)
Sheet2.ListObjects("table_1")
而不是 Sheet2.ListObjects("Table_" Row - 3)
复制了 excel 中的 table 名称并将其粘贴到 Set tbl = .ListObjects("Table_" & Row - 3)
行中
也许您可以根据自己的需要进行调整?再一次,我不确定你到底想要什么,所以我尽可能地写了它。
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。希望大家可以根据需要进行调整
我想在最后一行填满我的列表对象时自动添加一行。但是 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 名称,此处将其更改为英文)
我试过:
将
Sheets("Uitwendige scheidingen")
更改为Sheets(Sheet2)
(显然Sheet2不存在)Sheet2.ListObjects("table_1")
而不是Sheet2.ListObjects("Table_" Row - 3)
复制了 excel 中的 table 名称并将其粘贴到
Set tbl = .ListObjects("Table_" & Row - 3)
行中
也许您可以根据自己的需要进行调整?再一次,我不确定你到底想要什么,所以我尽可能地写了它。
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。希望大家可以根据需要进行调整