|
Selection.Copy - как сохранить формат в переменную?
|
|||
---|---|---|---|
#18+
Задача: Есть лист с огромным количеством строк. В таблице 80 столбцов. В одной из колонок стоит пользовательский признак форматирования. На втором листе есть пример формата для каждого стиля форматирования. Задачу решаем с помощью Selection.Copy и PasteSpecial Paste:=xlPasteFormats Application.CutCopyMode = False На большом количестве строк выполняется долго. "Тормоза" происходят на "Selection.Copy" Хочу в один момент времени в переменных или еще где иметь значение из "Selection.Copy" для всех форматов (их не более 10) Как можно скопировать и запомнить значения форматов нескольких диапазонов?? В диапазоне одна строка и много столбцов Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2012, 13:12 |
|
Selection.Copy - как сохранить формат в переменную?
|
|||
---|---|---|---|
#18+
Irhen"Тормоза" происходят на "Selection.Copy"вот это как раз неясно. Какой диапазон ячеек попадает в Copy? (размер) Кроме того, зачем тут Selection в принципе? И еще - обновление экрана блокируется на момент выполнения макроса? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2012, 13:20 |
|
Selection.Copy - как сохранить формат в переменную?
|
|||
---|---|---|---|
#18+
Shocker.Pro, Обновление блокируется. В Copy попадает одна строка и 80 столбцов ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2012, 13:23 |
|
Selection.Copy - как сохранить формат в переменную?
|
|||
---|---|---|---|
#18+
Selection выбросил (был в первоначальной версии), но на копировании тормоза продолжаются. Тут вопрос принципиальный - я бы хотел пробежаться по 10 стилям, запомнить 10 вариантов форматирования 80 ячеек. и потом уже идти по 50 тыс строк и их форматтировать в зависимости от условия ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2012, 13:31 |
|
Selection.Copy - как сохранить формат в переменную?
|
|||
---|---|---|---|
#18+
IrhenЗадачу решаем с помощьюВы выбрали самое медленное решение. IrhenКак можно скопировать и запомнить значения форматов нескольких диапазонов?Никак и это вам не нужно. Нужно задать диапазон, в котором находится пример форматирования, диапазон, которому нужно изменить стиль, и, собственно, изменить его с помощью Font, Interior и прочих свойств, затрагиваемых стилем. Код: vbnet 1. 2. 3. 4.
А вообще-то у экселя есть встроенная фишка под названием "условное форматирование" (меню "формат"), которое делает это без всяких макросов, причем сразу. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2012, 13:46 |
|
Selection.Copy - как сохранить формат в переменную?
|
|||
---|---|---|---|
#18+
Antonariy, Про "Условное форматирование" знаю. Но наперед неизвестно количество строк в таблице. Накладывать же условное форматирование на максимальное количество строк в листе, мне кажется неразумным. начинаю склонятся к Вашему предложению - явно прописывать свойства формата. Неудобно конечно - в строке доастсточно много ячеек и у каждой может быть свой формат. С копированием формата на небольшом количестве строк все было проще и удобней :-) Спасибо за помощь. Если есть идеи - буду благодарен. А все же, чисто для общего развития - возможно ли скопировать диапазон и куда-то сохранить содержимое буфера? включая форматирование и значения в общем случае? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2012, 13:57 |
|
Selection.Copy - как сохранить формат в переменную?
|
|||
---|---|---|---|
#18+
IrhenНакладывать же условное форматирование на максимальное количество строк в листе, мне кажется неразумным.Расплывчатое "кажется неразумным" на самом деле означает "не знаю, потому боюсь". Это стандартная практика, для этого условное форматирование и сделали встроенной фичей, не зависящей от тормозных макросов. Формат можно накладывать на диапазон, диапазоном может быть вся колонка независимо от количества реально используемых строк. IrhenА все же, чисто для общего развития - возможно ли скопировать диапазон и куда-то сохранить содержимое буфера? включая форматирование и значения в общем случае?Теоретически да. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2012, 15:23 |
|
Selection.Copy - как сохранить формат в переменную?
|
|||
---|---|---|---|
#18+
AntonariyIrhenвозможно ли скопировать диапазон и куда-то сохранить содержимое буфера? включая форматирование и значения в общем случае?Теоретически да. А практически - куда? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2012, 15:35 |
|
Selection.Copy - как сохранить формат в переменную?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2012, 15:43 |
|
Selection.Copy - как сохранить формат в переменную?
|
|||
---|---|---|---|
#18+
AntonariyIrhenНакладывать же условное форматирование на максимальное количество строк в листе, мне кажется неразумным. Формат можно накладывать на диапазон, диапазоном может быть вся колонка независимо от количества реально используемых строк. . Вы знаете, условное форматирование не позволит назначить высоту строки и горизонтальное-вертикальное выравнивание в ячейке . Оно конечно имеет право на применение, но на большом объеме отрабатывает весьма долго - в моем случае для определения формата КАЖДОЙ ячейки в строке будет проверяться значение ячейки с номером формата. то есть значение будет проверяться не для строки, а для каждой ячейки в строке ...плюс умножить на возможное количество форматов Необходимо форматировать ячейки в строке. В разных строках в одной и той же колонке могут быть разные форматы и наоборот - поэтому условным форматированием столбцов красиво решить данную задачу не получиться. Не подходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2012, 16:03 |
|
Selection.Copy - как сохранить формат в переменную?
|
|||
---|---|---|---|
#18+
посматриваю в сторону стилей, но в моем случае - 10 видов форматов строк, содержащих 80 столбцов, получается 800 стилей... Длительность применения стилей прямо прапорциональна кол-ву накладываемых стилей ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2012, 16:05 |
|
Selection.Copy - как сохранить формат в переменную?
|
|||
---|---|---|---|
#18+
Оно конечно имеет право на применение, но на большом объеме отрабатывает весьма долго - в моем случае для определения формата КАЖДОЙ ячейки в строке будет проверяться значение ячейки с номером формата.Гарантирую, макросами дольше. Впрочем, ввиду предыдущего условия, вариантов не остается. И если вы хотите скорости, забудьте про буфер обмена совсем. Даже через апи работа с ним будет медленнее чем вообще без него. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2012, 16:31 |
|
Selection.Copy - как сохранить формат в переменную?
|
|||
---|---|---|---|
#18+
Antonariy если вы хотите скорости, забудьте про буфер обмена совсем. Даже через апи работа с ним будет медленнее чем вообще без него. Спасибо за совет ! ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2012, 16:54 |
|
Selection.Copy - как сохранить формат в переменную?
|
|||
---|---|---|---|
#18+
Новая хрень: если в ячеках имеются данные, то простое ActiveWorkbook.Sheets("report").Range("REPORT_ZONE").Font.Name = arial ActiveWorkbook.Sheets("report").Range("REPORT_ZONE").Font.Size = 22 ActiveWorkbook.Sheets("report").Range("REPORT_ZONE").Font.Bold = true занимает минуту.... никакого копирования из буфера в данном случе нет. На чистом листе это занимает 5 сек ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2012, 19:29 |
|
Selection.Copy - как сохранить формат в переменную?
|
|||
---|---|---|---|
#18+
> Автор: Irhen > Новая хрень: > ActiveWorkbook.Sheets("report").Range("REPORT_ZONE").Font.Bold = true > занимает минуту.... Установка жирного шрифта занимает в первый раз продолжительное время по простому нажатию Ctrl+B Тянется ещё(когда я на это обратил внимание) года этак с 98-2000. Решения сразу не нашел, поэтому забил и не парюсь. P.S. Как вариант, можно присваивать жирность в первый раз одной ячейке, при этом подгружаются шрифты(и если шрифтов много, это занимает длительное время) и после этого начинать ковровое бомбометание по площадям Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2012, 19:35 |
|
Selection.Copy - как сохранить формат в переменную?
|
|||
---|---|---|---|
#18+
IrhenНовая хрень: если в ячеках имеются данные, то простое ActiveWorkbook.Sheets("report").Range("REPORT_ZONE").Font.Name = arial ActiveWorkbook.Sheets("report").Range("REPORT_ZONE").Font.Size = 22 ActiveWorkbook.Sheets("report").Range("REPORT_ZONE").Font.Bold = true занимает минуту.... никакого копирования из буфера в данном случе нет. На чистом листе это занимает 5 секЭто потому что выполняется много лишних действий. Всего лишь в трех этих строках, состоящих из 15 операций, 8 лишних, берущих на себя 90% тормозов. Три раза выбирается одна и та же книга, один и тот же лист, диапазон (это самое медленное действие) и шрифт. Вот как правильно: Код: vbnet 1. 2. 3. 4. 5.
Прирост производительности для этих трех строк в такой форме составит 60-70%. PS: К тому же название шрифта без кавычек. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2012, 19:55 |
|
|
start [/forum/topic.php?fid=60&msg=37706484&tid=2157985]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 336ms |
total: | 455ms |
0 / 0 |