Не могу решить вопрос из сабжа (Set HideApp = New Application: HideApp.Visible = False) - валится с ошибкой "Метод Copy из класса Worksheet завершен неверно".
Как только книгу открываю в активном приложении, то ошибка чудесным образом исчезает.
Вопрос: как скопировать лист книги открытой в скрытом приложении Excel в активную книгу, ну например в которой запускается некий макрос?
Sub Кнопка1_Щелчок()
Set HideApp = New Application: HideApp.Visible = False 'создадим объект application и укажем, что объект не видимый
'Отключим отображение предупреждений
Application.DisplayAlerts = False
'Отключим обновление экрана
Application.ScreenUpdating = False
'Запомним активную книгу
Set ActWB = ThisWorkbook
'Oткроем файл в режиме «только чтение»
Set WB = HideApp.Workbooks.Open("C:\6\test_book.xls", ReadOnly:=True)
'Скопируем первый лист в активную книгу
WB.Sheets(1).Copy After:=ActWB.Sheets(ActWB.Sheets.Count)
'Включим отображение предупреждений
Application.DisplayAlerts = True
'Включим обновление экрана
Application.ScreenUpdating = True
MsgBox "Обработка файла завершена", vbInformation
End Sub
здесь ведь получается, что вы создаетё ещё один экземпляр приложения (и ещё один процесс), а затем копируете лист, т.е. это межпроцессное взаимодействие, которое по всей видимости не поддерживается Excel-ем в данном контексте.
Попробуйте сделать всё под одним процессом.
По идее вот так не должно быть сильно заметно "бликов" при открытии книги с исходным листом:
VB.NET / VBA:
Sub Кнопка1_Щелчок()
Dim wbSource As Workbook
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set wbSource = Workbooks.Open(ThisWorkbook.Path & "\Hidden.xls", ReadOnly:=True)
wbSource.Windows(1).Visible = False
wbSource.Sheets(1).Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
wbSource.Windows(1).Visible = True
wbSource.Close
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
P.S. И я бы не советовал подменять понятия:
VB.NET / VBA:
'Запомним активную книгу
Set ActWB = ThisWorkbook
Всё-таки активная книга - это не всегда книга, откуда вызывается макрос (ThisWorkbook).