Дополнительная строка вставлена ​​с использованием xlDown в Excel - PullRequest
0 голосов
/ 04 ноября 2010

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

В настоящее время у меня есть 7 таких диапазонов, однако проблема в том, что первые три всегдавставили дополнительную строку - раньше это работало без проблем, так что тот факт, что он плохо себя ведет, для меня загадка.

Остальные диапазоны верны.tableStartAdress относится к именованным диапазонам, значения которых соответствуют первой ячейке под зеленым заголовком, то есть A4, A12 и т. Д. rowsToInsert для этого примера всегда равно 38.

Sub InsertTableRows(tableStartAdress As String, rowsToInsert As Integer)
    Dim i As Integer
    Dim rowToCopy As String

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    Application.DisplayAlerts = False
    Range(tableStartAdress).Offset(1, 0).Rows.Copy

    rowToCopy = Range(tableStartAdress).Offset(1, 0).row & ":" & _           
                   Range(tableStartAdress).Offset(1, 0).row

    Rows(rowToCopy).Select
    Selection.Copy

    Range(tableStartAdress).Offset(1, 0).Select
    ActiveCell.Resize(rowsToInsert, 1).Select

    Selection.Insert Shift:=xlDown
    Application.CutCopyMode = False

    Application.ScreenUpdating = True
    Application.DisplayAlerts = True

End Sub

На следующих рисунках показано, чтоЯ имею в виду.

До:

How the wkSheet looks before date population.

После заполнения данных первые три диапазона / таблицы имеют дополнительную строку

Extra Rows, Extra Row,

В то время как остальные значения верны

Correct blank stuff

1 Ответ

1 голос
/ 05 ноября 2010

Я бы предложил упростить ваш код для начала. (Может помочь вам отследить, если что-то идет не так.) Поскольку вам не нужно выбирать диапазон, прежде чем что-то с ним делать ...

rowToCopy = Range(tableStartAdress).Offset(1, 0).Row & _
    ":" & Range(tableStartAdress).Offset(1, 0).Row
Rows(rowToCopy).Select
Selection.Copy

Range(tableStartAdress).Offset(1, 0).Select
ActiveCell.Resize(rowsToInsert, 1).Select
Selection.Insert Shift:=xlDown

совпадает с ...

Range(tableStartAdress).Offset(1, 0).EntireRow.Copy
Range(tableStartAdress).Offset(1, 0).Resize(rowsToInsert, 1).Insert Shift:=xlDown

, на который гораздо проще смотреть. Пара мыслей: во-первых, вы уверены, что tableStartAddress действительно всегда одна ячейка (и правильная ячейка)? Вы уверены, что rowToInsert всегда 38? Кроме того, ваш код в том виде, в котором он написан в настоящий момент, копирует всю строку и вставляет ее в диапазон, теоретически 38 строк на 1 столбец. Я бы порекомендовал переписать это так, чтобы вы сначала вставили столько строк, сколько хотите, а затем заполните диапазон 38 x 1 данными, которые там находятся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...