VB: скопировать диапазон в другое приложение Excel - PullRequest
5 голосов
/ 19 декабря 2011

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

Set secondExApp = CreateObject("Excel.Application")

. Я использую эту ссылку для дальнейшей обработки.До сих пор я пробовал два разных способа.Оба не работают должным образом.

0 .: Подготовка / Введение

Set srcWb = Application.ActiveWorkbook
Set srcSheet = srcWb.Worksheets("example")

Set dstApp = CreateObject("Excel.Application")
Set dstWb = dstApp.Workbooks(1)
Set dstSheet = dstWb.Worksheets(1)

1 .: PasteSpecial - обеспечивает изображение (!) вместо только диапазона

srcSheet.Range("A1:B2").Copy
dstSheet.Range("A1:B2").PasteSpecial xlPasteAll

2 .: Range.Copy [Destination] - не работает - правильно ли, что я могу использовать этот метод только для листов в одном приложении?

srcSheet.Range(srcSheet.Cells(..., ...), srcSheet.Cells(..., ...)).Copy _
dstSheet.Range(dstSheet.Cells(..., ...), dstSheet.Cells(..., ...))

Anyприветствуется помощь.


Редактировать : я уже поиграл с функцией «макрос записи», но я предпочитаю кодировать ее самостоятельно, без «выбора» или «активации» ячеек/ листов / и т. д.


Редактировать ( решено ) : Большое спасибо GSerg и iDevlop, вы дали мне хорошую отправную точку.Я провел некоторое исследование, касающееся констант Excel xlClipboardFormatDspText.

Что мне действительно помогло, так это то, что открытие нового экземпляра Excel изменяет меню Вставить (Специально).

Поэтому вместо создания нового экземпляра я просто добавляю рабочую книгу (которая может быть скрыта) и использую этот объект для добавления своего контента.Поскольку он удерживается в одном и том же экземпляре (также посмотрите на диспетчер задач), меню «Вставить» (Специальное) полностью совпадает.

Теперь можно использовать Range.Copy [назначение] даже без выбора!

Результат :

'Hides the new workbook
Application.ScreenUpdating = False

Set dstWb = Workbooks.Add
Set dstSheet = dstWb.Worksheets(1)

srcSheet.Range(srcSheet.Cells(..., ...), srcSheet.Cells(..., ...)).Copy
dstSheet.Paste dstSheet.Range(dstSheet.Cells(..., ...), dstSheet.Cells(..., ...))

'Avoids the often seen dashed border around the copied range
Application.CutCopyMode = False

'Setting the initial change back
Application.ScreenUpdating = True

Программное обеспечение: Excel 2007

1 Ответ

4 голосов
/ 19 декабря 2011

Как определено, тыкая Excel палкой, вы должны использовать Worksheet.Paste для вещей между Excel:

srcSheet.Range("A1:B2").Copy
dstSheet.Paste dstSheet.Range("A1")

Вытягивание Excel с более толстой ручкой показало, что формулы сохраняются при вставке из буфера обмена как xlClipboardFormatDspText:

srcSheet.Range("A1:B2").Copy
dstSheet.Range("A1").Select
dstSheet.PasteSpecial xlClipboardFormatDspText, False

Однако для этого сначала необходимо выбрать ячейку в dstSheet, поскольку Worksheet.PasteSpecial использует активную ячейку.

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