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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.06.2011, 21:05   #1
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию Создание копии листа.

Прорабатываю одну идею нужен совет.
Задача: есть лист на котором находиться сложная таблица (ее размер заранее не известен) и кнопки. Нужно сделать копию информации ВСЕЙ информации на листе в один в один, без кнопок. Для хранения и последующего восстановления (обратного копирования) при необходимости.
Решение:
1. Можно пройтись по каждой ячейки и скопировать ее содержание. Но мне чем-то это решение не нравиться, хотя оно легко организовывается.
2. Можно выделить весь лист и просто вставить. Более симпатично, но в этом случае копируются и кнопки... Можно ли этого избежать?

Как лучше поступить? Есть ли другой путь?
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 30.06.2011, 21:23   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Пройтись в копии по кнопкам и их удалить. Я так делал.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 30.06.2011, 21:27   #3
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Пройтись в копии по кнопкам и их удалить. Я так делал.
Можно пример кода цикла удаления всех кнопок?
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 30.06.2011, 21:33   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Давайте лист с Вашими кнопками - посмотрим.
Кнопки разные бывают...

А так, с обычными:
Код:
Sub tt()
Dim sh As Object
For Each sh In Shapes
'sh.Select
sh.Delete
Next
End Sub
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 30.06.2011 в 21:36.
Hugo121 вне форума Ответить с цитированием
Старый 30.06.2011, 21:41   #5
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Давайте лист с Вашими кнопками - посмотрим.
Кнопки разные бывают...
Вот пример...
Так же копируются все выпадающие списки и т.п. А мне нужна только информация, без оформления.
Вложения
Тип файла: rar Книга1.rar (6.4 Кб, 15 просмотров)
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 30.06.2011, 21:51   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Может тогда тупо так - раз оформление не нужно?
Код:
Sub tt()
Dim a
a = ActiveSheet.UsedRange.Value

With Workbooks.Add.Sheets(1)
.[a1].Resize(UBound(a, 1), UBound(a, 2)) = a
End With
End Sub
P.S. можно ещё после выгрузки
Код:
.UsedRange.EntireColumn.AutoFit
воткнуть...
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 30.06.2011, 22:37   #7
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Я тут подумал - если это резервное копирование только данных, то может в текст сохранять?
Место здорово сэкономите...
Тот же массив a перебором построчно писать в текст, разделяя ячейки табами.
Если этому тексту дать расширение xls, то открыть можно кликом как xls, и с виду будет лист Экселя, но места займёт меньше, да и архивироваться тоже будет хорошо.
Или можно стандартным способом сохранить лист в текст.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 01.07.2011, 13:12   #8
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Я тут подумал - если это резервное копирование только данных, то может в текст сохранять?
Место здорово сэкономите...
Я всегда говорил: текстовый файл - лучшая база данных. :)) Но ту не много другой случай.
Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Тот же массив a перебором построчно писать в текст, разделяя ячейки табами.
Я ввел у себя стандартный разделитель "||". В этом случае нет особых ограничений для текста.
Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Если этому тексту дать расширение xls, то открыть можно кликом как xls, и с виду будет лист Экселя, но места займёт меньше, да и архивироваться тоже будет хорошо.
Или можно стандартным способом сохранить лист в текст.
Опишу ситуацию подробнее:
Принята как аксиома следующая формула: один объект работ - одна папка (по адресу) - один файл (документация).
По одному объекту может быть:
* Несколько договоров.
* У каждого договора могут быть несколько доп.соглашений.
* По каждому договору и доп.соглашению может формироваться любая (из предусмотренных) документация.
При есть только один комплект текущих "исходных данных" для договора, доп.соглашения и любого формируемого документа.

Вывод: Так как договоров и т.д. может быть много, а текущие "исходные данные" только одни, для переключения между договорами и т.д. нужно сохраняться "исходные данные" для текущего договора и восстанавливать "исходные данные" для договора и т.д. на который происходит переключение.

При реализации этой концепции я столкнулся с тем что для договоров и доп.соглашений количество данных ограничено и известно заранее, сохранить их на техническом листе не составляет проблемы. А вот количество исходных данных для формируемых документов заранее не известно, по этому мелькнула мысль не заморачиваться, а тупо копировать весь лист исходными данными. Но как видимо подобное решение не слишком удачное. Я пока слоняюсь к мысли что все же нужно переносить данные по поэлементно, хотя макрос и получиться размашистый.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 01.07.2011, 13:23   #9
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Перенести массивом как я выше показал не годится? Формулы только пропадут вместе с форматами.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 01.07.2011, 14:04   #10
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Перенести массивом как я выше показал не годится? Формулы только пропадут вместе с форматами.
При обработки массивом, встанет проблема уничтожения формул, так как значения и формулы тесно переплетены.
Не думаю что целесообразно плодить кучу текстовых файлов с данными. Рациональнее создавать технические листы и прятать их от пользователя. Тем более что можно координаты размещения информации рассчитывать одновременно и для листа с исходными данными, и для технического листа. Формулы запоминать не надо, они автоматически пересчитаются при и изменении данных.
Вопрос лишь в размер скрипта, и муторности его написания. Да и будут проблемы с тем что количество данных у разных договоров будет разным, придется предусмотреть механизм удаления лишних данных.
Но похоже нужно выбрать именно этот путь...
С уважением, Алексей.

Последний раз редактировалось tae1980; 01.07.2011 в 14:07.
tae1980 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание формулы для прайс-листа demon932008 Microsoft Office Excel 10 01.07.2011 18:29
Создание листа с определенным именем. bud-dy Microsoft Office Excel 10 28.01.2011 13:57
Создание копии проекта MFC в Visual C 6.0 Dmitry_B Visual C++ 4 23.10.2010 17:46
Создание листа с одновременным созданием формулы на ячейку нового листа ShamanK Microsoft Office Excel 4 02.05.2010 22:00
создание нового листа cathie Microsoft Office Excel 2 12.12.2007 15:49