Copy-Paste несмежные диапазоны - PullRequest
4 голосов
/ 15 апреля 2019

У меня есть данные в Excel. Я хочу скопировать заголовок и некоторые данные из середины листа в Powerpoint. Я знаю, что вы не можете скопировать выделенные несмежные ячейки в Excel, но у меня сложилось впечатление, что это будет работать с VBA.

Моя попытка:

With Workbooks(1).Sheets(1)
    Set rng = Union(.Range("B2:K3"), .Range("B45:K85"))
End With

Я могу выбрать «rng», но нигде не могу вставить его, потому что получаю сообщение об ошибке, что вы не можете вставить несмежные ячейки.

Я тоже пробовал это, но это привело к копированию всей таблицы (B2: K85):

With ThisWorkbook.Sheets("Sheet1")
        Set rng1 = .Range("B2:K3")
        Set rng2 = .Range("B45:K85")
        Set NewRng = .Range(rng1.Address & ":" & rng2.Address)
End With

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

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

1 Ответ

4 голосов
/ 15 апреля 2019

Вы можете использовать свойство Areas объекта Range, чтобы получить объединенные диапазоны.Код, подобный приведенному ниже, будет циклически проходить по каждому из поддиапазонов, копировать их и вставлять их в другое место.Попробуйте адаптироваться к вашим потребностям и напишите, если вам нужна помощь.

Sub Test()
    Dim rng As Range
    Dim r As Range
    Dim destination As Range


    Set rng = Union(Range("A1:B3"), Range("D1:E2"))
    Set destination = Range("H1")


    For Each r In rng.Areas
        r.Copy destination
        Set destination = destination.Offset(, 3)
    Next r
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...