Как скопировать и вставить в следующую строку - PullRequest
0 голосов
/ 14 мая 2019

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

Я привык иметь дело с кодом и редактировать существующие вещи, но это первый раз, когда мне пришлось начинать с нуля.

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

например. ячейка C5 на листе ввода данных копирует в столбец A основного файла, C7 в столбец B и т. д.

Мне удалось получить его для копирования, но я выполнял только каждую ячейку отдельно (в идеале, я хотел бы копировать и вставлять все сразу, как диапазон, а не каждую ячейку в отдельности), но независимо от того, что я пробую со всех страниц. здесь я не могу заставить его переходить к следующему ряду каждый раз.

Скопируйте и вставьте, что работает:

Sheets("RAW DATA").Range("Ak2").PasteSpecial Paste:=xlPasteValues
Sheets("Enter Accident").Range("Q19").Copy
Sheets("RAW DATA").Range("AL2").PasteSpecial Paste:=xlPasteValues
Sheets("Enter Accident").Range("Q21").Copy
Sheets("RAW DATA").Range("AM2").PasteSpecial Paste:=xlPasteValues
Sheets("Enter Accident").Range("Q23").Copy
Sheets("RAW DATA").Range("AN2").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False

То, что я пытался, и это не сработало:

Sheets("Enter Accident").Range("C3, C5, C7, C9, C11, C13 ,C15, C17, C19, C21, C23, C25, C27, C29, C31, G3, G11, G13, G15, G17, G19, G21, G23, G25, G31, L3, L11, L13, L15, L19, L21, Q3, Q5, Q7, Q9, Q11, Q15, Q17, Q19, Q21, Q23").Copy
Sheets("RAW DATA").Range("A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, K2, L2, M2, N2, O2, P2, Q2, R2, S2, T2, U2, V2, W2, Z2, Y2, AA2, AB2, AC2, X2, AD2, AE2, AF2, AG2, AH2, AI2, AJ2, AK2, AL2, AM2, AN2").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False

Ни один из них не работает с любым намерением добавить последнюю строку, такую ​​как:

Dim lastrow As Range
Set lastrow = Sheets("RAW DATA").Cells.SpecialCells(xlCellTypeLastCell).EntireRow + 1

Ответы [ 2 ]

0 голосов
/ 14 мая 2019

Вы один из многих людей, копирующих данные в буфер обмена, когда в этом нет особой необходимости.Давайте посмотрим на этот кусок кода:

Sheets("Enter Accident").Range("Q19").Copy
Sheets("RAW DATA").Range("AL2").PasteSpecial Paste:=xlPasteValues

Это точно так же, как:

Sheets("RAW DATA").Range("AL2").Value = Sheets("Enter Accident").Range("Q19").Value

За исключением:

  1. Как вы нечерез буфер обмена, он будет идти быстрее.
  2. Если вы уже положили что-то в буфер обмена, он не будет перезаписан.

Ответ от SJR -разработка этого объяснения.

0 голосов
/ 14 мая 2019

Один подход.Если ваши диапазоны могут варьироваться, возможно, лучше использовать OFFSET и цикл.

Sub x()

Dim vCopy, vPaste, i As Long

vCopy = Array("C3", "C5", "C7", "C9", "C11", "C13 ,C15", "C17", "C19", "C21", "C23", "C25", "C27", "C29", "C31", "G3", "G11", "G13", "G15", "G17", "G19", "G21", "G23", "G25", "G31", "L3", "L11", "L13", "L15", "L19", "L21", "Q3", "Q5", "Q7", "Q9", "Q11", "Q15", "Q17", "Q19", "Q21", "Q23")
vPaste = Array("A2", "B2", "C2", "D2", "E2", "F2", "G2", "H2", "I2", "J2", "K2", "L2", "M2", "N2", "O2", "P2", "Q2", "R2", "S2", "T2", "U2", "V2", "W2", "Z2", "Y2", "AA2", "AB2", "AC2", "X2", "AD2", "AE2", "AF2", "AG2", "AH2", "AI2", "AJ2", "AK2", "AL2", "AM2", "AN2")

For i = LBound(vCopy) To UBound(vCopy)
    Sheets("RAW DATA").Range(vPaste(i)).Value = Sheets("Enter Accident").Range(vCopy(i)).Value
Next i

End Sub

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

Sub x()

Dim vCopy, i As Long, rPaste As Range

vCopy = Array("C3", "C5", "C7", "C9", "C11", "C13 ,C15", "C17", "C19", "C21", "C23", "C25", "C27", "C29", "C31", "G3", "G11", "G13", "G15", "G17", "G19", "G21", "G23", "G25", "G31", "L3", "L11", "L13", "L15", "L19", "L21", "Q3", "Q5", "Q7", "Q9", "Q11", "Q15", "Q17", "Q19", "Q21", "Q23")

Set rPaste = Sheets("RAW DATA").Cells(Rows.Count, 1).End(xlUp)(2)

For i = LBound(vCopy) To UBound(vCopy)
    rPaste.Value = Sheets("Enter Accident").Range(vCopy(i)).Value
    Set rPaste = rPaste.Offset(, 1)
Next i

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