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

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

Итак, по сути, у меня есть 3 листа. На листе 1 я буду вручную вводить данные в следующую пустую строку (данные охватывают столбец A и столбец U). Лист 2 связан с Листом 1 таким образом, чтобы при выборе строки и автозаполнении до следующей она отображала данные из Листа 1 (а также увеличивала значения в каждой ячейке для учета инфляции).

Таким образом, после ввода данных в новую строку на листе 1, я хочу запустить макрос, который будет динамически автоматически заполнять последнюю строку на листе 2 до следующей пустой строки. Я также хочу, чтобы это повторилось при переходе от Листа 2 к Листу 3.

Например, если на листах 1 и 2 имеются данные вплоть до строки 35, я хочу иметь возможность вручную вводить данные в строку 36, а затем мой макрос автоматически заполняет строки с 35 по 36 на листе 2.

Код, который я написал до сих пор, приведен ниже. Чтобы пояснить, base / basee и home / homee - это ячейки, которые я назвал для сравнения значений из указанных c столбцов для моего оператора if / then. Я получаю сообщение об ошибке 1004 в последней строке, где я пытаюсь выполнить автозаполнение до следующей ячейки со смещением (1,0)

Sub PracticeTool()

   Dim current1 As Integer
   Dim current2 As Integer

     Worksheets("City1").Select
     Application.Goto Reference:="base"
     Selection.End(xlDown).Select
     Selection.End(xlDown).Select

     current1 = Selection

     Worksheets("Inflation").Select
     Application.Goto Reference:="basee"
     Selection.End(xlDown).Select
     Selection.End(xlDown).Select

     current2 = Selection

If (current1 <> current2) Then

    Application.Goto Reference:="homee"
    Selection.End(xlDown).Select
    Selection.End(xlDown).Select
    Selection.End(xlDown).Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.AutoFill Destination:=Selection.Offset(1, 0), Type:=xlFillDefault



End If

End Sub

Лист 1 Пример данных: https://i.stack.imgur.com/pTFo5.png

Лист 2 Пример данных: https://i.stack.imgur.com/kufrV.png

1 Ответ

0 голосов
/ 20 января 2020

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

Этот код должен соответствовать требованию.

Прочитайте комментарии и отрегулируйте их так, чтобы они подходили ваши потребности.

Public Sub AutoFillSheets()

    AutoFillRange "Sheet2", "A", "U"
    AutoFillRange "Sheet3", "A", "U"

End Sub


Private Sub AutoFillRange(ByVal targetSheetName As String, ByVal fromColumnLetter As String, toColumnLetter As String)

    Dim targetSheet As Worksheet
    Dim targetRange As Range

    Dim targetLastRow As Long

    Set targetSheet = ThisWorkbook.Worksheets(targetSheetName)

    ' Get the last row in source sheet
    targetLastRow = targetSheet.Cells(targetSheet.Rows.Count, 1).End(xlUp).Row

    ' Set the range to copy
    Set targetRange = targetSheet.Range(fromColumnLetter & targetLastRow & ":" & toColumnLetter & targetLastRow)

    ' You had the error in this line (below). Problem is that to use autofill you need to include the rows from which Excel would calculate the source range (see that I took the last row in the first column, and added one to the second column)
    targetRange.AutoFill Destination:=targetSheet.Range(fromColumnLetter & targetLastRow & ":" & toColumnLetter & targetLastRow + 1)

End Sub
...