Вставить одно и то же значение в несколько ячеек на разных листах - PullRequest
0 голосов
/ 04 октября 2019

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

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

Это код lastrow (работает нормально)

Last_Row2 = Sheets("Records").Range("a1").End(xlDown).Row

код для запускаячейка

legrng = Sheets("Records").Cells(Rows.count, 4).End(xlUp).Offset(1)

код для вставки значения в диапазон

Range("LegRng & Last_row2").Copy Destination = "cell value in sheet A"

Я получаю здесь ошибку:

Range("LegRng & Last_row2").Copy Destination = "cell value in sheet A"

ошибка: метод 'Range of object_global' не выполнен

Не могли бы вы сказать мне, что я делаю неправильно?

спасибо за помощь/ объяснение

Ответы [ 2 ]

1 голос
/ 04 октября 2019

У вас есть пара ошибок

Сначала вы пытаетесь обратиться к диапазону с именем LegRng & Last_row2 . Такой диапазон не существует в вашей рабочей таблице, он не может существовать, потому что это имя недопустимо.

Если вы хотите установить ссылку на диапазон, содержащий более одной ячейки, вы делаете это следующим образом:

Sheets("Records").Range(startCell, endCell)

Итак, сначала вам нужно установить ссылки на startCell и endCell (я полагаю, вы хотите, чтобы последняя ячейка была также в столбце 4):

Set startCell = Sheets("Records").Cells(Rows.count, 4).End(xlUp).Offset(1)
Set endCell = Sheets("Records").Cells(Last_Row2, 4)

Вы можете заполнить диапазон с помощьюзначение, используя его свойство Value

rng.Value = "value"

Итак, в конце ваш код должен выглядеть так:

With Sheets("Records")
    Last_Row2 = .Range("a1").End(xlDown).Row
    Set startCell = .Cells(Rows.count, 4).End(xlUp).Offset(1)
    Set endCell = .Cells(Last_Row2, 4)
    .Range(startCell, endCell).value = "cell value in sheet A"
End With
0 голосов
/ 04 октября 2019

Если не заключить в If Statement, который проверяет, является ли startCell.Row меньше Last_Row2, принятый ответ вызовет проблемы, при повторном запуске код будет помещать value from sheet A в следующую ячейку каждый раз, когдамакрос выполняется повторно.

Вы должны всегда определять и назначать свои переменные.

Использование Resize позволяет вам не требовать endCell.

Удаление Offset из startCell обеспечивает правильный счет для Resize

Sub FillInBlankCellsWithValue()
Dim Last_Row2 As Long, startCell As Range

    With Sheets("Records")
        Last_Row2 = .Range("a1").End(xlDown).Row
        Set startCell = .Cells(Rows.Count, 4).End(xlUp)

        'Use the If statement to test that the startCell.Row is less then the Last_Row2 
        If startCell.Row < Last_Row2 Then

            'Offset to the first empty cell and resize by subtracting the startCell.Row
            'from Last_Row2, to set the range for the value from SheetA.
            startCell.Offset(1).Resize(Last_Row2 - startCell.Row).Value = Sheets("SheetA").Range("A1")
            'Change the worksheet and paste value's cell range, as needed


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