Диапазон копирования, исключая пустые ячейки - вставьте на другой лист - PullRequest
0 голосов
/ 01 мая 2020

Хорошо, еще раз!

Я пытался искать на этом и других форумах, чтобы найти похожее решение, но все, что я нашел, либо просто достаточно отличается, чтобы я не мог найти приложение к моей проблеме, либо слишком сложное, и я не могу перевести Это! Так что я надеюсь, что кто-то может помочь мне здесь. Заранее спасибо!!

Вот сценарий. У меня есть база данных, в которую мне нужно добавить данные. Номер предложения, Номер заказа, Название части подсистемы, Поставщик, Материал, Цена, Кол-во. Et c.

Короче говоря, не вдаваясь в контекст того, почему я сделал это таким образом (в основном потому, что я думаю, что я испортил бы объяснение и был бы более запутанным, чем полезным!) ... По сути, я имею в виду 3 таблицы рядом друг с другом.

В таблице 1 приведены столбцы H и I. Все они имеют формулу, аналогичную = if (isblank (J4), "", $ I $ 1) где I1 - номер заказа (который останется тем же для этого набор записей.) Таблица 2 является сводной таблицей в столбцах с J по M. Используя слайсер, пользователь может выбрать, какие подсистемы ему нужны для этого заказа. Сводная таблица будет заполнена соответствующими номерами деталей и уникальной информацией, содержащейся в другой таблице. Таблица 3 является обычной таблицей в столбцах с N по R. Эти столбцы имеют некоторые формулы, подобные приведенным выше, которые извлекают из одной ячейки (для ввода даты), некоторые извлекают информацию из другой таблицы на основе информации в столбце J через VLOOKUP, а некоторые информация вводится вручную.

Это может быть слишком много информации, но лучше иметь ее и не нуждаться в ней, а?

Итак, вот цель. С помощью макроса VBA я хочу скопировать данные и вставить их на другой лист в нижней части базы данных. Хитрость заключается в том, что из-за того, что вся вышеописанная установка выполняется на основе информации, поступающей из сводной таблицы, список постоянно меняет длину. Он никогда не будет длиннее определенной длины (все еще определяется), но почти всегда будет короче. Я могу скопировать все это и вставить его на другой лист под последней записью ... но он вставляется под последнюю пустую ячейку на листе базы данных. Я имею в виду следующее:

Самым длинным столом может быть диапазон H4: R38, например. Поэтому я копирую это и вставляю в Sheet2, начиная с ячейки A2. При дальнейшей проверке мы видим, что в диапазоне H4: R11 имеются только фактические данные. Однако, когда мы вставили его в Sheet2, он вставил весь диапазон H4: R38. Когда я снова запускаю макрос, вместо нового набора данных, вставляемого в строку A10 (строка, после которой должны были закончиться данные), он вставляется во что-то вроде строки 36 ... потому что его вставка находится ниже всех пустых ячеек.

Понятия не имею, что делать и с чего начать. Любая помощь будет принята с благодарностью! Большое спасибо!

Код, который я пробовал:

Dim fabricationrange As Range
Dim destination As Range
Dim LastBBUFabDatabaseRow As Long

Worksheets("Sub Systems").Range("h4:r38").Copy

With ThisWorkbook.Sheets("BBU Fab. Database")

Worksheets("bbu fab. database").Range("z" & Rows.Count).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues


Range("b" & Rows.Count).End(xlUp).Offset(1).PasteSpecial xlPasteValuesAndNumberFormats


    lastbbufabdatabserow = .Cells(.Rows.Count, 2).End(xlUp).Row = 1
    Set destination = .Cells(LastBBUFabDatabaseRow, 2)

   destination.Value = PasteSpecial.Values

End With

1 Ответ

0 голосов
/ 01 мая 2020

Не проверено, но вот грубый подход к поиску первой пустой строки:

set rngDest = ThisWorkbook.Sheets("BBU Fab. Database").rows(2) '<< start here
do while application.counta(rngDest) > 0
    set rngDest = rngDest.offset(1, 0) 'next row
loop
Worksheets("Sub Systems").Range("H4:R38").Copy
rngDest.cells(1).PasteSpecial xlPasteValuesAndNumberFormats '<< paste to col A
...