Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2011, 13:51   #1
Acina
 
Регистрация: 03.06.2011
Сообщений: 9
По умолчанию еще раз про копирование листов из другой книги

Добрый день!
помогите решить задачу.
Есть файл "паспорт.xls" c 26 листами:
"n1", "n2", "n3", "n4",....."n18","n20"..."n28"
и файл "Шаблон.xls" с листами "4" и "19"

Нужен макрос, который копировал бы листы из шаблона в соответствующие места паспорта

Попытались сами написать макрос, но он не копирует форматы и вставляет не туда куда надо.
На самом деле таких файлов как "паспорт" 300 шт. все лежат в одной папке и во все надо скопировать эти несчастные 2 листа из шаблона.

Помогите.


Sub ВставитьЛистыИзШаблона()

Dim book As Workbook
Dim cbook As Workbook
Dim nsheet As Worksheet
Dim prevsheet As Worksheet
Set cbook = ActiveWorkbook
Set prevsheet = ActiveSheet

iFullName = "C:\Паспорт\Шаблон.xls"

Set book = Workbooks.Open(iFullName)
Set nsheet = cbook.Sheets.Add(Type:=xlWorksheet)
nsheet.Name = "n4"
book.Sheets("4").Range("A1:M10000") .Copy Destination:=nsheet.Range("A1")

book.Close False

prevsheet.Activate

End Sub
Acina вне форума Ответить с цитированием
Старый 03.06.2011, 13:58   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Так копируйте листы целиком. Не содержимое, а сами листы.

Вот записал, можно творчески использовать (макрос вроде грамотно написан, должны справиться):
Код:
Sub Macro1()
    Sheets("Sheet1").Select
    Sheets("Sheet1").Copy Before:=Workbooks("Book2").Sheets(2)
End Sub
И если обрабатывать сразу все 300 паспортов, то шаблон закрывать незачем - задали через set две ссылки на нужные листы, затем в цикле открывайте нужные файлы, копируйте в них листы по ссылке, закрывайте. Потом в конце закроете шаблон.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 03.06.2011 в 14:04.
Hugo121 вне форума Ответить с цитированием
Старый 03.06.2011, 15:07   #3
Acina
 
Регистрация: 03.06.2011
Сообщений: 9
По умолчанию Не сработало!

очень жаль, ничего не получается

Sub ВставитьЛистыИзШаблона()

Dim book As Workbook
Dim cbook As Workbook
Dim nsheet As Worksheet
Dim prevsheet As Worksheet
Set cbook = ActiveWorkbook
Set prevsheet = ActiveSheet

iFullName = "C:\Паспорт\Шаблон.xls"

Set book = Workbooks.Open(iFullName)
'не поняла, нужно добавлять в паспорт пустой лист или нет?
'и как его поставить на 4 место

Set nsheet = cbook.Sheets.Add(Type:=xlWorksheet)
nsheet.Name = "n4"


'book.Sheets("4").Range("A1:M10000" ).Copy Destination:=nsheet.Range("A1")
'book.Sheets("4").Range("A1:M10000" ).Copy Format:=nsheet.Range("A1")

book.Sheets("4").Select

book.Sheets("4").Copy Before:=Workbooks("C:\Паспорт\Паспо рт1.xls").Sheets(4)

'book.Close False

prevsheet.Activate

End Sub
Acina вне форума Ответить с цитированием
Старый 03.06.2011, 15:24   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Я думаю, ошибка тут - тут имя файла без пути нужно указывать:
Код:
book.Sheets("4").Copy Before:=Workbooks("Паспорт1.xls").Sheets(4)
и может быть без расширения.
Но этот файл уже должен быть открыт.
Для открытия нужно цикл написать, например на Dir().
А лист добавлять не нужно, если Вы его целиком копируете.
Да и book.Sheets("4").Select лишнее, это рекордерово
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 03.06.2011, 17:32   #5
Acina
 
Регистрация: 03.06.2011
Сообщений: 9
По умолчанию копирование получилось

спасибо, кажется получилось
теперь попробую скопировать на все файлы
Acina вне форума Ответить с цитированием
Старый 03.06.2011, 17:50   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Мне без примера код писать не получится, поэтому прикину алгоритм макроса:
1.открыли файл "C:\Паспорт\Шаблон.xls", задали ссылки на два нужных листа.
2.в цикле открываем файл из нужной папки (папку прописать в коде или выбрать выше в диалоге)
3.копируем в этот файл два листа, файл сохраняем/закрываем, идём опять п.2, пока не закончатся файлы
4.закрываем "C:\Паспорт\Шаблон.xls"

И "скопировать на все файлы" тут в общем нечего, пусть этим занимается код. Мне кажется, Вы что-то иначе собирались делать...
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Еще раз про lookup HashDiler БД в Delphi 2 08.02.2011 21:00
Копирование листов из закрытой книги rubius2008 Microsoft Office Excel 6 05.02.2011 22:44
И еще раз про libtorrent hotcooler17 C/C++ Сетевое программирование 5 29.01.2011 21:52
копирование одного и того же набор ячеек со всеx существующиx листов на 1ый лист книги skapitan Microsoft Office Excel 6 25.03.2010 20:40
Еще раз про адресацию tae1980 Microsoft Office Excel 2 25.02.2009 07:56