|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
13.05.2011, 17:47 | #11 |
Пользователь
Регистрация: 11.05.2011
Сообщений: 59
|
Там по сути то что нужно, только проблема в том, что там файлы, с которых по листику копируется, называются 1 и 2. А у меня они с текстовым названием и к тому же названия меняются раз в месяц......
Спасибо за помощь, я попробую разобраться, может и получится... |
13.05.2011, 17:59 | #12 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Вы в этом коде в переменной wb получаете ссылку на эту новую книгу уже с тремя листами.
Теперь кодом берёте данные из своих файлов (если уже открыты - по именам, если их нужно открыть и закрыть - то удобно использовать GetObject, поищите по форуму). Т.е. у Вас есть куда и есть что - далее или копируете лист в wb целиком (типа sh.Copy before:=wb.Sheets(wb.Sheets.count), или сперва добавляете новый чистый лист и потом в него копируете данные, как в той ссылке, или переносите только значения через массив например (это если нужно/можно убить формулы).
webmoney: E265281470651 Z422237915069 R418926282008
|
15.05.2011, 20:22 | #13 |
Пользователь
Регистрация: 11.05.2011
Сообщений: 59
|
Простите, я ничего не понялааа....
У меня вот этот макрос запускается из той книги, из которой я выдергиваю 3 листка "КАССА ИТОГ", "1С И ПРОЧЕЕ", "АНАЛИЗ ПРИБЫЛИ", и переносит этот макрос их в новую книгу, которая называется "Ежедневный отчет". Как же тогда обратиться из этой книги к ещё одной, третьей, чтоб оттуда выдрать листок и тоже вставить его в книгу "Ежедневный отчет"? Sub Создать_Ежедневный_Отчет() ' ' Создать_Ежедневный_Отчет Макрос ' Dim wb As Workbook Sheets(Array("КАССА ИТОГ", "1С И ПРОЧЕЕ", "АНАЛИЗ ПРИБЫЛИ")).Select Sheets("1С И ПРОЧЕЕ").Activate Sheets(Array("КАССА ИТОГ", "1С И ПРОЧЕЕ", "АНАЛИЗ ПРИБЫЛИ")).Copy ActiveWorkbook.SaveAs Filename:="C:\Ежедневный отчет.xlsx", FileFormat:=xlNormal, _ Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _ CreateBackup:=False End Sub Я так понимаю wb - это переменная, на которую мы повесим обращение ко второй книге и вытаскивание из неё одного листка, и добавление его в "Ежедневный отчет"? Прошу прощение за такие глупые вопросы... но я правда практически ничего в VBA не понимаю.... помогите мне пожалуйста... |
15.05.2011, 20:35 | #14 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Нет, не так - в wb будет ссылка на новую книгу, которая получена после
Sheets(Array("КАССА ИТОГ", "1С И ПРОЧЕЕ", "АНАЛИЗ ПРИБЫЛИ")).Copy скопировали - получили книгу, присвоили ссылку на неё переменной: Set wb = ActiveWorkbook А вот как обратится к третьей книге - тут море возможностей, вернее три - по имени, если открыта, открыть, если закрыта, или GetObject в обоих случаях. Но про третью книгу мы ничего не знаем, в отличие от Вас...
webmoney: E265281470651 Z422237915069 R418926282008
Последний раз редактировалось Hugo121; 15.05.2011 в 20:37. |
15.05.2011, 20:41 | #15 |
Пользователь
Регистрация: 11.05.2011
Сообщений: 59
|
Так...
а кодом это будет выглядеть что то вроде: Sheets(Array("КАССА ИТОГ", "1С И ПРОЧЕЕ", "АНАЛИЗ ПРИБЫЛИ")).Copy Set wb = ActiveWorkbook Да, вторая книга тоже открыта. И из неё нам надо вытащить листок, который называется "Бюджет". У второй книги есть название, просто оно каждый месяц меняется. Я конечно могу в макросах каждый месяц менять название... называется она сейчас "Итог апреля". |
16.05.2011, 10:44 | #16 |
Пользователь
Регистрация: 11.05.2011
Сообщений: 59
|
Вот как я сделала:
Sub Создать_Ежедневный_Отчет() ' ' Создать_Ежедневный_Отчет Макрос ' Dim wb As Workbook Dim nsheet As Worksheet Sheets(Array("КАССА ИТОГ", "1С И ПРОЧЕЕ", "АНАЛИЗ ПРИБЫЛИ")).Select Sheets("1С И ПРОЧЕЕ").Activate Sheets(Array("КАССА ИТОГ", "1С И ПРОЧЕЕ", "АНАЛИЗ ПРИБЫЛИ")).Copy Set wb = ActiveWorkbook ' ссылка на новую созданную книгу Set nsheet = wb.Sheets.Add(Type:=xlWorksheet) nsheet.Name = "Бюджет" ' имя нового добавленного листа ActiveWorkbook.SaveAs Filename:="C:\Ежедневный отчет.xlsx", FileFormat:=xlNormal, _ Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _ CreateBackup:=False End Sub Теперь у меня создается как надо первый лист в книге "Ежедневный отчет", называется он бюджет, но он пока пуст. И теперь нужно в него как то вставить лист "Бюджет" из книги "Итог апреля". Вот картинка: 1.JPG Те листы, что после "Бюджет" идут, вставидись отлично. Теперь бюджет бы тюда вставить из книги "Итог апреля". |
16.05.2011, 10:54 | #17 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Давайте просто попробуем целиком скопировать лист "Бюджет":
Код:
Тогда Set nsheet = wb.Sheets.Add(Type:=xlWorksheet) nsheet.Name = "Бюджет" ' имя нового добавленного листа лишнее, лист создавать не нужно, он скопируется целиком. Это я пробовал на новой книге, у Вас чуть иначе нужно будет: Before:=wb.Worksheets(1) Название переменной itogWB чисто условное, т.к. wb уже задействовано, то я придумал такое...
webmoney: E265281470651 Z422237915069 R418926282008
Последний раз редактировалось Hugo121; 16.05.2011 в 11:01. |
16.05.2011, 11:08 | #18 |
Пользователь
Регистрация: 11.05.2011
Сообщений: 59
|
Нет, попробовала, не видит и ничего не вставляет.
Ещё уточнение. Я этот код, который выше писала, вставляю в книгу, из которой дергаю 3 листа: "КАССА ИТОГ", "1С И ПРОЧЕЕ", "АНАЛИЗ ПРИБЫЛИ". Эта книга называется "Анализ прибыли". Значит нужно туда добавить код, который будет находить в этой же папке (в которой находится книга "Анализ прибыли") открытую книгу ""Итог апреля"", и из неё скопировать лист "Бюджет". |
16.05.2011, 12:04 | #19 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Вы же сказали, что книга уже открыта.
Вот эта строка For Each itogWB In Workbooks перебирает все открытые книги, а эта If InStr(itogWB.Name, "Итог") Then itogWB.Sheets("Бюджет").Copy Before:=Worksheets(1): Exit For ищет в названии книги "Итог" и при совпадении копирует лист и выходит из цикла перебора. Если не сработало, то одно из трёх - 1.нет такой открытой книги, 2.есть, но не такая , 3.нет такого листа. Определитесь, как делать - есть 3 варианта, как взять лист - из открытой, открыть кодом, или c помощью GetObject. С анализом имени книги можно усложнить - искать "Итог " и начало названия прошлого месяца 3 буквы, т.е. "Итог апр", "Итог янв". Можно аналогично и в папке искать. А можно просто добавить диалог выбора, пусть пользователь явно ткнёт мышом в нужный файл.
webmoney: E265281470651 Z422237915069 R418926282008
Последний раз редактировалось Hugo121; 16.05.2011 в 12:30. |
16.05.2011, 12:30 | #20 |
Пользователь
Регистрация: 11.05.2011
Сообщений: 59
|
Ураааа!!!! Всё получилось!!!! Спасииибо!!! Когда объяснили значение каждой строчки сразу всё понятно стало ))))
У меня ещё вот такой код есть: ' скрытие помеченных столбцов Sub Скрыть_ненужные_столбцы() Rows("1:1").SpecialCells(xlCellType Constants, 23).EntireColumn.Hidden = True End Sub 'отоброжение помеченных столбцов Sub Показать_нужные_строки() Columns("A:A").SpecialCells(xlCellT ypeConstants, 23).EntireRow.Hidden = False End Sub он скрывал ненужные столбцы во вкладке "Бюджет". Можно этот код привязать вот сюда? Sub Создать_Ежедневный_Отчет() ' ' Создать_Ежедневный_Отчет Макрос ' Dim wb As Workbook Dim nsheet As Worksheet Sheets(Array("КАССА ИТОГ", "1С И ПРОЧЕЕ", "АНАЛИЗ ПРИБЫЛИ")).Copy Set wb = ActiveWorkbook ' ссылка на новую созданную книгу Dim itogWB As Workbook For Each itogWB In Workbooks If InStr(itogWB.Name, "Итог") Then itogWB.Sheets("Бюджет").Copy Before:=wb.Worksheets(1): Exit For Next ActiveWorkbook.SaveAs Filename:="C:\Ежедневный отчет.xlsx", FileFormat:=xlNormal, _ Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _ CreateBackup:=False End Sub |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Копирование из одной книги в другую | 804040 | Microsoft Office Excel | 4 | 16.08.2010 11:03 |
Скопировать данные из некоторых ячеек одной книги в другие книги | fcunited | Microsoft Office Excel | 8 | 09.06.2010 12:14 |
Скопировать диапазон с одной книги в другую, если совпадают назавание листов | m_v_v | Microsoft Office Excel | 7 | 06.04.2010 13:15 |
Как скопировать данные таблицы из одной базы access в другую? | AK BULLETS | БД в Delphi | 2 | 31.03.2010 13:09 |
как из одной BDgrid скопировать выделенное поле в другую BDgrid | Шурик | БД в Delphi | 7 | 03.05.2007 14:24 |