Страницы: 1
RSS
Алгоритм копирования листа.
 
Задача, в принципе, несложная.Код на VBA я и сам написать могу,лучше алгоритмом подскажите.    
 
Есть открытый файл  (скажем c:\111\test.xls). По нажатию кнопки нужно скопировать activesheet  в  другой файл  (скажем c:\222\test.xls). Затык в том что Excel не дает открыть два файла с одним именем. Приходить копировать лист в темповую книгу, закрывать c:\111\test.xls , и только потом копировать нужный лист в книгу назначения (c:\222\test.xls). Потом закрываем книгу назначения и открываем источник(c:\111\test.xls). "Долго,муторно и  не интересно" , особенно если книги по размеру более 50мб...  
 
Подскажите, как сделать реализацию попроще ?
 
Два файла с одинаковым именем можно открыть одновременно - но в разных копиях Excel.  
Отсюда - вариант 1: Открываем файл-получатель в новой копии Excel - копируем туда лист - закрываем файл-источник вместе с приложением. (остаётся открытым Excel, который с файлом-получателем)  
 
Есть второй вариант:  
Поскольку файл-источник надо закрывать БЕЗ сохранения, то ничто не мешает сохранить его во временной папке под случайным именем (любым другим), и после этого произвести копирование листа.  
 
PS: Учитывая объём файлов - я бы использовал копирование через промежуточную книгу.  
Сначала - activesheet.Copy  
потом - activeworkbook.worksheets(1).move Workbook2.worksheets(1)  
 
Метод Move вместо Copy - чтобы временная книга сразу исчезала.
 
"Два файла с одинаковым именем можно открыть одновременно - но в разных копиях Excel."  - это я знал, но предполагал , что excel не умеет копировать листы между разными экземплярами excel. После Вашего совета попробовал сделать программно - ни в какую (ошибка 1004 method failed). Может приведете рабочий пример как это сделать на VBA?  
 
Второй предложенный вариант не подходит, поскольку файл источник нужен именно с сохранениеи.  
 
ps/  
А вообще решил сделать так(если кому-то интересно). С помощью Scripting.FileSystemObject переименовываем файл-приемник. Открываем его,копируем лист,закрываем. Переименовываем обратно.
Страницы: 1
Читают тему
Наверх