Ошибка выполнения 1004 при добавлении строк таблицы - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь использовать следующий код для добавления строк в таблицу. Мне нужно, чтобы число строк было динамическим, потому что я добавляю строки из одной таблицы в основную таблицу, а количество строк в дополнительной таблице может варьироваться.

В настоящее время ячейка F2 подсчитывает количество строк в дополнительной таблице, и это должно быть количество строк, которое макрос добавляет в мою основную таблицу. Однако, когда я ссылаюсь на переменную RowNumber , я получаю сообщение об ошибке «Ошибка метода вставки класса диапазона».

Я попытался заменить переменную другими числами, а затем код работает нормально. Однако всякий раз, когда я использую переменную, я получаю сообщение об ошибке.

Ценю любую помощь.

Sub AddRows()

Dim ws As Worksheet
Dim RowNumber As Range

Set ws = ThisWorkbook.ActiveSheet

    With ws
        Set RowNumber = .Range("F2")
        Range("A8").End(xlDown).Select
        ActiveCell.EntireRow.Resize(RowNumber.Value).Insert Shift:=xlDown
    End With

Range("tblDetail").Select
Range("A10").Activate
Selection.FillDown


End Sub

РЕДАКТИРОВАТЬ: я думаю, что я получаю сообщение об ошибке, потому что у меня есть таблица, которая начинается на три строки ниже моей основной таблицы (это файл импорта для программного обеспечения для онлайн-учета, для которого требуется определенное количество таблиц). Я поиграл со значением в F2: все, что больше, чем «4» в F2, приводит к ошибке 1004 (при условии, что активная ячейка во время выполнения макроса находится в последней строке моей основной таблицы). Все, что меньше 4, и код работает нормально.

Возможно ли использовать переменные с функцией listrows.add, так как моя главная таблица является объектом списка?

1 Ответ

0 голосов
/ 06 сентября 2018

Попробуйте:

ActiveCell.EntireRow.Resize(CInt(RowNumber.Value)).Insert Shift:=xlDown

Мне удалось воспроизвести вашу ошибку в моей собственной таблице. Range ("F2"). Значение возвращало строковое значение, когда F2 содержал формулу =ROWS(Table1). Конверсия исправила это для меня.

Исправленный ответ

Следующий код добавит число строк, указанное в F2, к таблице, в которой находится A8:

Dim insertIndex As Integer
Dim insertPosition As Integer

With Range("A8")
    insertPosition = .Row - .ListObject.Range.Row
    With .ListObject.ListRows
        For insertIndex = 1 To CInt(Range("F2").Value)
            .Add
        Next
    End With
End With

Это работает, даже если непосредственно под таблицей, в которой находится A8, есть таблица.

...