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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2011, 17:47   #11
Toffifee
Пользователь
 
Аватар для Toffifee
 
Регистрация: 11.05.2011
Сообщений: 59
По умолчанию

Там по сути то что нужно, только проблема в том, что там файлы, с которых по листику копируется, называются 1 и 2. А у меня они с текстовым названием и к тому же названия меняются раз в месяц......

Спасибо за помощь, я попробую разобраться, может и получится...
Toffifee вне форума Ответить с цитированием
Старый 13.05.2011, 17:59   #12
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Вы в этом коде в переменной wb получаете ссылку на эту новую книгу уже с тремя листами.
Теперь кодом берёте данные из своих файлов (если уже открыты - по именам, если их нужно открыть и закрыть - то удобно использовать GetObject, поищите по форуму).
Т.е. у Вас есть куда и есть что - далее или копируете лист в wb целиком (типа sh.Copy before:=wb.Sheets(wb.Sheets.count), или сперва добавляете новый чистый лист и потом в него копируете данные, как в той ссылке, или переносите только значения через массив например (это если нужно/можно убить формулы).
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 15.05.2011, 20:22   #13
Toffifee
Пользователь
 
Аватар для Toffifee
 
Регистрация: 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 не понимаю.... помогите мне пожалуйста...
Toffifee вне форума Ответить с цитированием
Старый 15.05.2011, 20:35   #14
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Нет, не так - в wb будет ссылка на новую книгу, которая получена после
Sheets(Array("КАССА ИТОГ", "1С И ПРОЧЕЕ", "АНАЛИЗ ПРИБЫЛИ")).Copy
скопировали - получили книгу, присвоили ссылку на неё переменной:
Set wb = ActiveWorkbook
А вот как обратится к третьей книге - тут море возможностей, вернее три - по имени, если открыта, открыть, если закрыта, или GetObject в обоих случаях.
Но про третью книгу мы ничего не знаем, в отличие от Вас...
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 15.05.2011 в 20:37.
Hugo121 вне форума Ответить с цитированием
Старый 15.05.2011, 20:41   #15
Toffifee
Пользователь
 
Аватар для Toffifee
 
Регистрация: 11.05.2011
Сообщений: 59
По умолчанию

Так...
а кодом это будет выглядеть что то вроде:

Sheets(Array("КАССА ИТОГ", "1С И ПРОЧЕЕ", "АНАЛИЗ ПРИБЫЛИ")).Copy
Set wb = ActiveWorkbook

Да, вторая книга тоже открыта. И из неё нам надо вытащить листок, который называется "Бюджет". У второй книги есть название, просто оно каждый месяц меняется. Я конечно могу в макросах каждый месяц менять название... называется она сейчас "Итог апреля".
Toffifee вне форума Ответить с цитированием
Старый 16.05.2011, 10:44   #16
Toffifee
Пользователь
 
Аватар для Toffifee
 
Регистрация: 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

Те листы, что после "Бюджет" идут, вставидись отлично. Теперь бюджет бы тюда вставить из книги "Итог апреля".
Toffifee вне форума Ответить с цитированием
Старый 16.05.2011, 10:54   #17
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Давайте просто попробуем целиком скопировать лист "Бюджет":

Код:
Sub Toffifee()
Dim itogWB As Workbook
For Each itogWB In Workbooks
If InStr(itogWB.Name, "Итог") Then itogWB.Sheets("Бюджет").Copy Before:=Worksheets(1): Exit For
Next
End Sub
Если всё нормально, потом добавите это в основной код.
Тогда 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.
Hugo121 вне форума Ответить с цитированием
Старый 16.05.2011, 11:08   #18
Toffifee
Пользователь
 
Аватар для Toffifee
 
Регистрация: 11.05.2011
Сообщений: 59
По умолчанию

Нет, попробовала, не видит и ничего не вставляет.

Ещё уточнение. Я этот код, который выше писала, вставляю в книгу, из которой дергаю 3 листа: "КАССА ИТОГ", "1С И ПРОЧЕЕ", "АНАЛИЗ ПРИБЫЛИ". Эта книга называется "Анализ прибыли".
Значит нужно туда добавить код, который будет находить в этой же папке (в которой находится книга "Анализ прибыли") открытую книгу ""Итог апреля"", и из неё скопировать лист "Бюджет".
Toffifee вне форума Ответить с цитированием
Старый 16.05.2011, 12:04   #19
Hugo121
Старожил
 
Регистрация: 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.
Hugo121 вне форума Ответить с цитированием
Старый 16.05.2011, 12:30   #20
Toffifee
Пользователь
 
Аватар для Toffifee
 
Регистрация: 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
Toffifee вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование из одной книги в другую 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