|
|
|
ПОсоветуйте способ сохранения листов
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток. Задача звучит следующим образом: по нажатию на кнопку нужно сохранить листы (какую-то их чать) из книги в новую книгу. Сложность состоит в ... быстродействии. На листах есть формулы, есть объедененные ячейки. Нужно сохранить данные листа в значениях + форматы. + настройки станицы. Первый вариант: Если создавать новую книгу и туда последовательно копировать данные (сначала вставляем всё, затем тольок значения), а потом все свойства PageSetup порировать с одной книги в другую.... при большом объеме данных в листах эта операция занимает достаточно много времени. Даже на "современном" компьюторе ( в зависимости от числа листов и объемов данных ) данный вариант сохранения работает очень долго. Второй вариант: Код: plaintext 1. file - полное имя новой книги для сохранения Этот способ не имеет проблем с временем выполения, но естьодин побочный эффект - в сохраненных листах не должно быть данных в модулях листов (а в первоначальной книге они есть). По итогу: 1 есть ли возможность у Sheets(arr_shtName).Copy не переносить данные модуля копируемых листов? 2 есть ли возможность программно "ставить галочку" в настройках безопасности "доверять доступ к Visual Basic Project", чтобы можно было почистить модули листов в новой книге. (понимаю, что звучит обсурдно,.. но вдруг такой доступ можно дать для доступа к вновь созданной книге) 3 ...оптимизация первого варианта решения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2009, 13:22 |
|
||
|
ПОсоветуйте способ сохранения листов
|
|||
|---|---|---|---|
|
#18+
может быть убрать из листов код? что такого, что нельзя перенести в модуль книги? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2009, 15:07 |
|
||
|
ПОсоветуйте способ сохранения листов
|
|||
|---|---|---|---|
|
#18+
newnoober, Есть возможность записать макрос при производстве такой ручной операции: 1. Мышью указываешь на участок листа на пересечении заголовков строк и столбцов и там кликаешь. У тебя выделяется весь рабочий лист. 2. Здесь говоришь Экселю <CTRL+С>, т.е. копируешь целиком весь лист в буфер. 3. Переходишь на другой лист в этой же кнгие (это для корректной записи макроса) 4. Встаешь на ячейку "А1" 5. Говоришь экселю <Ctrl+V>, т.е. вставляешь весь лист целиком. Причем при таком способе копирования копируются не только значения (и формулы) ячеек, но и формат ячеек. Код листа никаким образом не затрагивается. 6. Сохраняешь полученный записанный макрос и изучаешь с внесением изменения на предмет переноса в другую книгу. Все должно хорошо работать. Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2009, 17:59 |
|
||
|
ПОсоветуйте способ сохранения листов
|
|||
|---|---|---|---|
|
#18+
_slan_может быть убрать из листов код? что такого, что нельзя перенести в модуль книги? - Обработчик событий листа. GresOfBase, "говоришь Экселю <CTRL+С>" и "Говоришь экселю <Ctrl+V>". - в каком месте копировать настройки страницы? <CTRL+С> & <Ctrl+V> - при большом кол-ве листов и большом объеме данных на листах теряем ОЧЕНЬ МНОГО времени :( (в этом и есть проблема) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2009, 15:32 |
|
||
|
ПОсоветуйте способ сохранения листов
|
|||
|---|---|---|---|
|
#18+
А в начале макроса используйте: Код: plaintext 1. И гораздо все быстрее. Конечно, в конце макроса, вернуть все обратно: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2009, 16:41 |
|
||
|
ПОсоветуйте способ сохранения листов
|
|||
|---|---|---|---|
|
#18+
Lost JonnyА в начале макроса используйте: Код: plaintext 1. И гораздо все быстрее. Конечно, в конце макроса, вернуть все обратно: Код: plaintext 1. Calculation и ScreenUpdating использую почти всегда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2009, 17:46 |
|
||
|
ПОсоветуйте способ сохранения листов
|
|||
|---|---|---|---|
|
#18+
newnoober, пункты с 1-го по 5-й выполняются в режиме записи макроса. 6-м пунктом макрос сохраняется. копирование и вставка должны быть выполнена целиком листа, т.е. надо выделить весь лист. Весь лист выделяется мышиным кликом на пересечении заголовков строк и столбцов, т.е. на прямоугольнике, расположенном сразу под адресной областью. После сохранения макроса можно посмотреть код, который запишет Excel, и выбрать необходимые команды для использования в своих процедурах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2009, 03:40 |
|
||
|
ПОсоветуйте способ сохранения листов
|
|||
|---|---|---|---|
|
#18+
newnoober, Отлично, давайте пример файла - и какие листы копирнуть в новую книгу - и засечем время. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2009, 09:56 |
|
||
|
ПОсоветуйте способ сохранения листов
|
|||
|---|---|---|---|
|
#18+
Макрос можно удалить макросом: http://msoffice.nm.ru/faq/macros/module.htm#faq47 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2009, 10:18 |
|
||
|
ПОсоветуйте способ сохранения листов
|
|||
|---|---|---|---|
|
#18+
Да, и там же ниже: Для того, чтобы удалить из текущей рабочей книги : все стандартные модули, модули класса, UserForm, а также программный код из всех модулей листа, книги, достаточно использовать любой из нижеопубликованных примеров (VBProject не должен быть защищён) : http://msoffice.nm.ru/faq/macros/module.htm#faq417 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2009, 10:20 |
|
||
|
ПОсоветуйте способ сохранения листов
|
|||
|---|---|---|---|
|
#18+
newnoober, Где можно взять исходный файл для анализа? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2009, 15:35 |
|
||
|
ПОсоветуйте способ сохранения листов
|
|||
|---|---|---|---|
|
#18+
2 GresOfBase Проблем с кодированием нет. Задача была в поиски оптимального решения для оптимизации затрат времени. 2 Lost Jonny, GresOfBase Второй день после недельного отпуска. Ещё не дошел до этой книжки. Возьму последний вариант и выложу книжку завтра. 2 Hugo121 Спасибо за помощь. Но проблема не в коде удаления макросов, есть проблемы с "привередливостью" задания.. - "2 есть ли возможность программно "ставить галочку" в настройках безопасности "доверять доступ к Visual Basic Project" " ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2009, 18:57 |
|
||
|
ПОсоветуйте способ сохранения листов
|
|||
|---|---|---|---|
|
#18+
Как я думаю, после копирования листов с макросами в новую книгу, можно сразу в ней удалить макросы этих листов. Или иначе - сперва удалить, затем копировать. Разве не это нужно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2009, 09:29 |
|
||
|
ПОсоветуйте способ сохранения листов
|
|||
|---|---|---|---|
|
#18+
Hugo121Как я думаю, после копирования листов с макросами в новую книгу, можно сразу в ней удалить макросы этих листов. Или иначе - сперва удалить, затем копировать. Разве не это нужно? Вы правильно думаете. Вы не правильно поняли что нужно. Архив книжки с примером (и листами для копирования) весит больше 2Мб. На форуме максимальный размер 100Kb. Потому, извините - не смогу віложить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2009, 10:52 |
|
||
|
ПОсоветуйте способ сохранения листов
|
|||
|---|---|---|---|
|
#18+
По итогу: 1 есть ли возможность у Sheets(arr_shtName).Copy не переносить данные модуля копируемых листов? - есть 2 есть ли возможность программно "ставить галочку" в настройках безопасности "доверять доступ к Visual Basic Project", чтобы можно было почистить модули листов в новой книге. - зачем чистить то, чего нет 3 ...оптимизация первого варианта решения - ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2009, 11:13 |
|
||
|
ПОсоветуйте способ сохранения листов
|
|||
|---|---|---|---|
|
#18+
Hugo121 По итогу: 1 есть ли возможность у Sheets(arr_shtName).Copy не переносить данные модуля копируемых листов? - есть какой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2009, 18:18 |
|
||
|
ПОсоветуйте способ сохранения листов
|
|||
|---|---|---|---|
|
#18+
Ну тестить код я сейчас не буду, сам такого не делал, но по ссылкам выше думаю надо сперва удалить из этих листов код, потом копировать (из копии файла, или не сохранять исходный файл после удаления кода или .... ну варианты можно придумать, главное что можно программно удалить макрос) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2009, 18:26 |
|
||
|
ПОсоветуйте способ сохранения листов
|
|||
|---|---|---|---|
|
#18+
Hugo121Ну тестить код я сейчас не буду, сам такого не делал, но по ссылкам выше думаю надо сперва удалить из этих листов код, потом копировать (из копии файла, или не сохранять исходный файл после удаления кода или .... ну варианты можно придумать, главное что можно программно удалить макрос) Спасибо за попытку помочь. Всего доброго. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2009, 19:10 |
|
||
|
ПОсоветуйте способ сохранения листов
|
|||
|---|---|---|---|
|
#18+
newnooberПо итогу: 1 есть ли возможность у Sheets(arr_shtName).Copy не переносить данные модуля копируемых листов? 2 есть ли возможность программно "ставить галочку" в настройках безопасности "доверять доступ к Visual Basic Project", чтобы можно было почистить модули листов в новой книге. (понимаю, что звучит обсурдно,.. но вдруг такой доступ можно дать для доступа к вновь созданной книге) 3 ...оптимизация первого варианта решения 1 - нет, нельзя. 2 - есть решения, но они зависят от версии и языка клиентского Экселя. Не удобно, не надежно, и опасно (макровирусы никто к сожалению не отменял). 3 - а это можно: События листа не обязательно хранить в модуле листа. Можно извратится например так как показано в аттаче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2009, 19:59 |
|
||
|
|

start [/forum/topic.php?fid=61&msg=36185673&tid=2179078]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
210ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 516ms |

| 0 / 0 |
