Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / ПОсоветуйте способ сохранения листов / 20 сообщений из 20, страница 1 из 1
27.08.2009, 13:22:05
    #36166046
newnoober
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПОсоветуйте способ сохранения листов
Доброго времени суток.
Задача звучит следующим образом: по нажатию на кнопку нужно сохранить листы (какую-то их чать) из книги в новую книгу.

Сложность состоит в ... быстродействии.
На листах есть формулы, есть объедененные ячейки. Нужно сохранить данные листа в значениях + форматы. + настройки станицы.
Первый вариант: Если создавать новую книгу и туда последовательно копировать данные (сначала вставляем всё, затем тольок значения), а потом все свойства PageSetup порировать с одной книги в другую....
при большом объеме данных в листах эта операция занимает достаточно много времени. Даже на "современном" компьюторе ( в зависимости от числа листов и объемов данных ) данный вариант сохранения работает очень долго.

Второй вариант:
Код: plaintext
1.
            Sheets(arr_shtName).Copy
            ActiveWorkbook.SaveAs (file)
arr_shtName - массив имен листов для копирования в активной книге
file - полное имя новой книги для сохранения
Этот способ не имеет проблем с временем выполения, но естьодин побочный эффект - в сохраненных листах не должно быть данных в модулях листов (а в первоначальной книге они есть).

По итогу:
1 есть ли возможность у Sheets(arr_shtName).Copy не переносить данные модуля копируемых листов?
2 есть ли возможность программно "ставить галочку" в настройках безопасности "доверять доступ к Visual Basic Project", чтобы можно было почистить модули листов в новой книге. (понимаю, что звучит обсурдно,.. но вдруг такой доступ можно дать для доступа к вновь созданной книге)
3 ...оптимизация первого варианта решения
...
Рейтинг: 0 / 0
28.08.2009, 15:07:55
    #36168217
_slan_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПОсоветуйте способ сохранения листов
может быть убрать из листов код?

что такого, что нельзя перенести в модуль книги?
...
Рейтинг: 0 / 0
28.08.2009, 17:59:19
    #36168613
GresOfBase
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПОсоветуйте способ сохранения листов
newnoober,

Есть возможность записать макрос при производстве такой ручной операции:
1. Мышью указываешь на участок листа на пересечении заголовков строк и столбцов и там кликаешь. У тебя выделяется весь рабочий лист.
2. Здесь говоришь Экселю <CTRL+С>, т.е. копируешь целиком весь лист в буфер.
3. Переходишь на другой лист в этой же кнгие (это для корректной записи макроса)
4. Встаешь на ячейку "А1"
5. Говоришь экселю <Ctrl+V>, т.е. вставляешь весь лист целиком.
Причем при таком способе копирования копируются не только значения (и формулы) ячеек, но и формат ячеек. Код листа никаким образом не затрагивается.
6. Сохраняешь полученный записанный макрос и изучаешь с внесением изменения на предмет переноса в другую книгу.

Все должно хорошо работать. Удачи!
...
Рейтинг: 0 / 0
07.09.2009, 15:32:58
    #36182174
newnoober
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПОсоветуйте способ сохранения листов
_slan_может быть убрать из листов код?

что такого, что нельзя перенести в модуль книги?
- Обработчик событий листа.


GresOfBase, "говоришь Экселю <CTRL+С>" и "Говоришь экселю <Ctrl+V>". - в каком месте копировать настройки страницы?
<CTRL+С> & <Ctrl+V> - при большом кол-ве листов и большом объеме данных на листах теряем ОЧЕНЬ МНОГО времени :( (в этом и есть проблема)
...
Рейтинг: 0 / 0
07.09.2009, 16:41:04
    #36182371
Lost Jonny
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПОсоветуйте способ сохранения листов
А в начале макроса используйте:
Код: plaintext
1.
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

И гораздо все быстрее. Конечно, в конце макроса, вернуть все обратно:
Код: plaintext
1.
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
...
Рейтинг: 0 / 0
07.09.2009, 17:46:49
    #36182576
newnoober
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПОсоветуйте способ сохранения листов
Lost JonnyА в начале макроса используйте:
Код: plaintext
1.
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

И гораздо все быстрее. Конечно, в конце макроса, вернуть все обратно:
Код: plaintext
1.
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic



Calculation и ScreenUpdating использую почти всегда.
...
Рейтинг: 0 / 0
08.09.2009, 03:40:33
    #36183051
GresOfBase
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПОсоветуйте способ сохранения листов
newnoober,
пункты с 1-го по 5-й выполняются в режиме записи макроса. 6-м пунктом макрос сохраняется.
копирование и вставка должны быть выполнена целиком листа, т.е. надо выделить весь лист. Весь лист выделяется мышиным кликом на пересечении заголовков строк и столбцов, т.е. на прямоугольнике, расположенном сразу под адресной областью.
После сохранения макроса можно посмотреть код, который запишет Excel, и выбрать необходимые команды для использования в своих процедурах.
...
Рейтинг: 0 / 0
08.09.2009, 09:56:36
    #36183284
Lost Jonny
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПОсоветуйте способ сохранения листов
newnoober,

Отлично, давайте пример файла - и какие листы копирнуть в новую книгу - и засечем время.
...
Рейтинг: 0 / 0
08.09.2009, 10:18:24
    #36183339
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПОсоветуйте способ сохранения листов
Макрос можно удалить макросом:
http://msoffice.nm.ru/faq/macros/module.htm#faq47
...
Рейтинг: 0 / 0
08.09.2009, 10:20:13
    #36183343
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПОсоветуйте способ сохранения листов
Да, и там же ниже:
Для того, чтобы удалить из текущей рабочей книги : все стандартные модули, модули класса, UserForm, а также программный код из всех модулей листа, книги, достаточно использовать любой из нижеопубликованных примеров (VBProject не должен быть защищён) :

http://msoffice.nm.ru/faq/macros/module.htm#faq417
...
Рейтинг: 0 / 0
08.09.2009, 15:35:55
    #36184353
GresOfBase
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПОсоветуйте способ сохранения листов
newnoober,

Где можно взять исходный файл для анализа?
...
Рейтинг: 0 / 0
08.09.2009, 18:57:17
    #36184906
newnoober
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПОсоветуйте способ сохранения листов
2 GresOfBase
Проблем с кодированием нет. Задача была в поиски оптимального решения для оптимизации затрат времени.

2 Lost Jonny, GresOfBase
Второй день после недельного отпуска. Ещё не дошел до этой книжки. Возьму последний вариант и выложу книжку завтра.

2 Hugo121
Спасибо за помощь. Но проблема не в коде удаления макросов, есть проблемы с "привередливостью" задания.. -
"2 есть ли возможность программно "ставить галочку" в настройках безопасности "доверять доступ к Visual Basic Project" "
...
Рейтинг: 0 / 0
09.09.2009, 09:29:02
    #36185478
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПОсоветуйте способ сохранения листов
Как я думаю, после копирования листов с макросами в новую книгу, можно сразу в ней удалить макросы этих листов. Или иначе - сперва удалить, затем копировать. Разве не это нужно?
...
Рейтинг: 0 / 0
09.09.2009, 10:52:19
    #36185673
newnoober
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПОсоветуйте способ сохранения листов
Hugo121Как я думаю, после копирования листов с макросами в новую книгу, можно сразу в ней удалить макросы этих листов. Или иначе - сперва удалить, затем копировать. Разве не это нужно?
Вы правильно думаете. Вы не правильно поняли что нужно.


Архив книжки с примером (и листами для копирования) весит больше 2Мб. На форуме максимальный размер 100Kb.
Потому, извините - не смогу віложить.
...
Рейтинг: 0 / 0
09.09.2009, 11:13:43
    #36185746
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПОсоветуйте способ сохранения листов
По итогу:
1 есть ли возможность у Sheets(arr_shtName).Copy не переносить данные модуля копируемых листов?
- есть
2 есть ли возможность программно "ставить галочку" в настройках безопасности "доверять доступ к Visual Basic Project", чтобы можно было почистить модули листов в новой книге. - зачем чистить то, чего нет
3 ...оптимизация первого варианта решения - ?
...
Рейтинг: 0 / 0
09.09.2009, 18:18:45
    #36187166
newnoober
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПОсоветуйте способ сохранения листов
Hugo121 По итогу:
1 есть ли возможность у Sheets(arr_shtName).Copy не переносить данные модуля копируемых листов?
- есть

какой?
...
Рейтинг: 0 / 0
09.09.2009, 18:26:54
    #36187186
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПОсоветуйте способ сохранения листов
Ну тестить код я сейчас не буду, сам такого не делал, но по ссылкам выше думаю надо сперва удалить из этих листов код, потом копировать (из копии файла, или не сохранять исходный файл после удаления кода или .... ну варианты можно придумать, главное что можно программно удалить макрос)
...
Рейтинг: 0 / 0
09.09.2009, 19:10:28
    #36187242
newnoober
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПОсоветуйте способ сохранения листов
Hugo121Ну тестить код я сейчас не буду, сам такого не делал, но по ссылкам выше думаю надо сперва удалить из этих листов код, потом копировать (из копии файла, или не сохранять исходный файл после удаления кода или .... ну варианты можно придумать, главное что можно программно удалить макрос)

Спасибо за попытку помочь. Всего доброго.
...
Рейтинг: 0 / 0
09.09.2009, 19:59:12
    #36187283
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПОсоветуйте способ сохранения листов
newnooberПо итогу:
1 есть ли возможность у Sheets(arr_shtName).Copy не переносить данные модуля копируемых листов?
2 есть ли возможность программно "ставить галочку" в настройках безопасности "доверять доступ к Visual Basic Project", чтобы можно было почистить модули листов в новой книге. (понимаю, что звучит обсурдно,.. но вдруг такой доступ можно дать для доступа к вновь созданной книге)
3 ...оптимизация первого варианта решения
1 - нет, нельзя.
2 - есть решения, но они зависят от версии и языка клиентского Экселя. Не удобно, не надежно, и опасно (макровирусы никто к сожалению не отменял).
3 - а это можно:

События листа не обязательно хранить в модуле листа. Можно извратится например так как показано в аттаче.
...
Рейтинг: 0 / 0
10.09.2009, 10:13:13
    #36187859
newnoober
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПОсоветуйте способ сохранения листов
White OwlСобытия листа не обязательно хранить в модуле листа. Можно извратится например так как показано в аттаче.

Спасибо большое, интересная альтернатива.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / ПОсоветуйте способ сохранения листов / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]