Страницы: 1
RSS
Copy-Paste из другой книги на VBA
 
Добрый день!
Помогите новичку, пожалуйста.
Есть 2 файла:
1.CopyPasteTest.xlsm
2.123.xlsx

В первом файле кнопка, при нажатии на которую должны скопироваться ячейки из второго файла в первый.
Код:

Sub Button()
Set objExcel = New Excel.Application
Set wb = objExcel.Workbooks.Open("123.xlsx")
Set ws = wb.Sheets(1)
Set sh = ThisWorkbook.Sheets(1)
sh.Range("A1") = ws.Range("A1") - ВОТ ТАК РАБОТАЕТ
ws.Range("A1:E1").Copy Destination:=sh.Range("A1:E1") - А ВОТ ТАК ВЫДАЕТ ОШИБКУ
wb.Close
End Sub

Ошибка:
1004 Метод Copy из класса Range завершен неверно.

Справку курил, из нее и взято как копировать. Все равно, не работает.
Изменено: Crowner - 12.05.2022 09:06:58
 
Код
Sub Button()
Dim objExcel As Application
Dim wb As Workbook
Dim ws As Worksheet
Dim sh As Worksheet

'Set objExcel = New Excel.Application
'Set wb = objExcel.Workbooks.Open("123.xlsx")
Set wb = Workbooks.Open("123.xlsx")
Set ws = wb.Sheets(1)
Set sh = ThisWorkbook.Sheets(1)
'sh.Range("A1") = ws.Range("A1") ' - ВОТ ТАК РАБОТАЕТ
ws.Range("A1:E1").Copy Destination:=sh.Range("A1:E1") ' - А ВОТ ТАК ВЫДАЕТ ОШИБКУ
wb.Close
End Sub
 
МатросНаЗебре, заработало! Спасибо!
А как теперь скрыть открываемый файл?
У меня скрывалось так:
Set objExcel = New Excel.Application
objExcel.Visible = False

А теперь не работает.
Изменено: Crowner - 12.05.2022 09:31:02
 
Цитата
Crowner написал:
Set objExcel = New Excel.Application
это создание нового экземпляра Excel, который ничего не знает о существовании старого. Поэтому и не копировалось.
Цитата
Crowner написал:
А как теперь скрыть открываемый файл?
Так и скрыть именно файл, а не приложение.
Код
wb.Visible = False
 
Цитата
написал:
А как теперь скрыть открываемый файл?
а зачем его скрывать, если после копирования он закрывается?
Может проще просто отключить мелькание экрана на время работы кода?
Код
Sub Button()
Dim objExcel As Application
Dim wb As Workbook
Dim ws As Worksheet
Dim sh As Worksheet

Application.ScreenUpdating = False 'отключаем обновление экрана
'Set objExcel = New Excel.Application
'Set wb = objExcel.Workbooks.Open("123.xlsx")
Set wb = Workbooks.Open("123.xlsx")
Set ws = wb.Sheets(1)
Set sh = ThisWorkbook.Sheets(1)
'sh.Range("A1") = ws.Range("A1") ' - ВОТ ТАК РАБОТАЕТ
ws.Range("A1:E1").Copy Destination:=sh.Range("A1:E1") ' - А ВОТ ТАК ВЫДАЕТ ОШИБКУ
wb.Close
Application.ScreenUpdating = True 'возвращаем обновление экрана
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1
Наверх