Excel VBA добавить значение в определенных ячейках - PullRequest
0 голосов
/ 08 января 2019

Ребята, вам помогли создать код для копирования значения из одной рабочей книги в другую. У меня есть еще один вопрос. Я хотел бы записать некоторую статическую информацию в ячейку в столбце J в той же строке, что и другая скопированная информация. Как мне добавить это в цикл?

Я пробовал:

wsDest.Cells(DestRow, "J").Value = "HVD"

Но это только добавляет значение в первом ряду, а не в остальных. Нет ошибок, но, похоже, он не зацикливается, как другой код внутри For Each .

Option Explicit

Public Sub CopyCells()
    Dim wsSrc As Worksheet 'define source sheet
    Set wsSrc = ThisWorkbook.Worksheets("Blad1")

    Dim wbDest As Workbook 'define destination workbook
    Set wbDest = Workbooks.Open("C:\Temp\Ändringar bef objekt.xlsx")

    Dim wsDest As Worksheet 'define destination sheet
    Set wsDest = wbDest.Worksheets("Ändringsdata")

    Dim DestRow As Long
    DestRow = 2 'start in row 2 in destination sheet

    wsSrc.Parent.Activate: wsSrc.Activate

    Dim Rng As Range
    For Each Rng In Selection.Areas
        Rng.Resize(, 1).Copy Destination:=wsDest.Cells(DestRow, "A") 'copy A to A
        Rng.Resize(, 1).Offset(, 5).Copy Destination:=wsDest.Cells(DestRow, "D") 'copy F to D
        **wsDest.Cells(DestRow, "J").Value = "HVD" 'write HVD in column J same row**
        DestRow = DestRow + Rng.Rows.Count 'move DestRow to next free row
    Next Rng
End Sub

1 Ответ

0 голосов
/ 10 января 2019

Я думаю, вы неправильно понимаете, как работает For Each. Он не проходит через каждый ряд или каждую ячейку. Он проходит через Areas, который является набором Range с. Обычно в этой коллекции только один Range, но если вы выделите ячейки с помощью Ctrl , то у вас будет больше элементов в Areas.

Итак, ваш код берет одну такую ​​«область» и копирует ее первый столбец в столбец A, затем 5-й столбец в столбец D и вводит «HVD» в одну ячейку (Cells(DestRow, "J")). Если вы хотите ввести это значение в каждой строке, вы должны изменить размер этой ячейки. И для этого вы можете использовать это:

wsDest.Cells(DestRow, "J").Resize(Rng.Rows.Count).Value = "HVD"

Кроме того, помните, что вы можете отлаживать код, поместив курсор в код макроса и нажав F8. Это будет запускать ваш код построчно, и все изменения будут сразу же видны на листе.

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