Индекс вне диапазона / listobject не существует, даже если listobject существует? - PullRequest
0 голосов
/ 05 февраля 2020

Я пытался добавить строку в объект списка, если последняя строка заполнена. но почему-то он не идентифицирует объект-лист в операторе if, и когда я пытаюсь установить переменную tbl для объекта-списка, он получает ошибку, что индекс находится вне диапазона

    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: (GrondWand - оригинальное имя таблицы, здесь его изменили на engli sh)

Listobject shown in excel

Я пробовал :

изменение Sheets("Uitwendige scheidingen") на Sheets(Sheet2) (очевидно, Sheet2 не существует)

Sheet2.ListObjects("table_1") вместо Sheet2.ListObjects("Table_" Row - 3)

Скопировано имя таблицы в Excel и вставил его в Set tbl = .ListObjects("Table_" & Row - 3) строку

1 Ответ

1 голос
/ 05 февраля 2020

Может быть, вы можете настроить это для своих нужд? Опять же, я не уверен, что именно вы хотите, поэтому я написал его как generi c, как мог.


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: действительно трудно догадаться, где вы определили что с ограниченным кодом, который вы показали. Я просто составил таблицу и определил диапазон для ее проверки. Я думаю, что ваша ошибка отсутствует .range. Надеюсь, что вы можете настроить это по мере необходимости

...