Копировать диапазон смещения - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть макрос VBA для копирования вставки ячеек.Проблема в том, что я должен скопировать этот макрос как 30 раз и пройти каждый случай.У меня такое же количество строк между ними, меняется только начальная строка.Я хотел бы изменить мой макрос, чтобы "скопировать смещение" из первой строки.Так что в этом конкретном случае якорной ячейкой является D13.

Я пытался использовать copySheet.Offset(17, 1).Copy ("D14: E30"), но, похоже, это не работает?

Sub CopyPaste()
Application.ScreenUpdating = False
Dim copySheet As Worksheet
Dim pasteSheet As Worksheet

Set copySheet = Worksheets("Calculation")
Set pasteSheet = Worksheets("Calculation")

Range("D13").MergeArea.Copy
pasteSheet.Cells(13, Columns.Count).End(xlToLeft).Offset(0, 1).PasteSpecial xlPasteAll

copySheet.Range("D14:E30").Copy
pasteSheet.Cells(13, Columns.Count).End(xlToLeft).Offset(1, 0).PasteSpecial xlPasteAll

Range("D31").MergeArea.Copy
pasteSheet.Cells(13, Columns.Count).End(xlToLeft).Offset(18, 0).PasteSpecial xlPasteAll

copySheet.Range("D32:E33").Copy
pasteSheet.Cells(13, Columns.Count).End(xlToLeft).Offset(19, 0).PasteSpecial xlPasteAll

Range("D163").MergeArea.Copy
pasteSheet.Cells(13, Columns.Count).End(xlToLeft).Offset(150, 0).PasteSpecial xlPasteAll

copySheet.Range("D164:E167").Copy
pasteSheet.Cells(13, Columns.Count).End(xlToLeft).Offset(151, 0).PasteSpecial xlPasteAll

Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Чтобы получить от Range("D13") до Range("D14:E30"), вы можете использовать комбинацию свойства Range.Offset и свойства Range.Resize .

Dim StartRange As Range
Set StartRange = copySheet.Range("D13")

'D14:E30
StartRange.Offset(1, 0).Resize(17, 2).Copy

'D32:E33
StartRange.Offset(19, 0).Resize(2, 2).Copy

Вы можете приспособить это к своим другим заявлениям копии.Поэтому, если вы измените свой StartRange, все остальные изменятся соответственно.

0 голосов
/ 19 февраля 2019

copySheet.Offset(1, 1).Copy не работает, потому что .Offset() требуется ссылка на ячейку или диапазон.

Например copySheet.Range("A10").Offset(1, 1).Copy


Если вы хотите скопировать смещение из D13:E40, то это возможный вариант:

copySheet.Range("D13:E40").Offset(17, 1).Copy

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