Я пытаюсь решить относительно простую проблему, но не могу ее осознать.Моя цель - скопировать диапазон ячеек на листе основного приложения 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