powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Selection.Copy - как сохранить формат в переменную?
16 сообщений из 16, страница 1 из 1
Selection.Copy - как сохранить формат в переменную?
    #37706454
Irhen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача:
Есть лист с огромным количеством строк. В таблице 80 столбцов. В одной из колонок стоит пользовательский признак форматирования.
На втором листе есть пример формата для каждого стиля форматирования.
Задачу решаем с помощью
Selection.Copy и PasteSpecial Paste:=xlPasteFormats Application.CutCopyMode = False

На большом количестве строк выполняется долго. "Тормоза" происходят на "Selection.Copy"
Хочу в один момент времени в переменных или еще где иметь значение из "Selection.Copy" для всех форматов (их не более 10)

Как можно скопировать и запомнить значения форматов нескольких диапазонов?? В диапазоне одна строка и много столбцов

Спасибо
...
Рейтинг: 0 / 0
Selection.Copy - как сохранить формат в переменную?
    #37706473
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Irhen"Тормоза" происходят на "Selection.Copy"вот это как раз неясно. Какой диапазон ячеек попадает в Copy? (размер)
Кроме того, зачем тут Selection в принципе?
И еще - обновление экрана блокируется на момент выполнения макроса?
...
Рейтинг: 0 / 0
Selection.Copy - как сохранить формат в переменную?
    #37706484
Irhen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Обновление блокируется. В Copy попадает одна строка и 80 столбцов
...
Рейтинг: 0 / 0
Selection.Copy - как сохранить формат в переменную?
    #37706502
Irhen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Selection выбросил (был в первоначальной версии), но на копировании тормоза продолжаются.
Тут вопрос принципиальный - я бы хотел пробежаться по 10 стилям, запомнить 10 вариантов форматирования 80 ячеек.
и потом уже идти по 50 тыс строк и их форматтировать в зависимости от условия
...
Рейтинг: 0 / 0
Selection.Copy - как сохранить формат в переменную?
    #37706551
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IrhenЗадачу решаем с помощьюВы выбрали самое медленное решение.
IrhenКак можно скопировать и запомнить значения форматов нескольких диапазонов?Никак и это вам не нужно. Нужно задать диапазон, в котором находится пример форматирования, диапазон, которому нужно изменить стиль, и, собственно, изменить его с помощью Font, Interior и прочих свойств, затрагиваемых стилем.

Код: vbnet
1.
2.
3.
4.
Dim src(1 to 10) as Range, trgt as Range
Set src(1) = Worksheets(2).Range("A1") 'первый диапазон с примером
Set trgt = Worksheets(1).Range("A1:CB") 'первая строка из 80и колонок
trgt.Interior.ColorIndex = src(1).Interior.ColorIndex 'копирование цвета фона



А вообще-то у экселя есть встроенная фишка под названием "условное форматирование" (меню "формат"), которое делает это без всяких макросов, причем сразу.
...
Рейтинг: 0 / 0
Selection.Copy - как сохранить формат в переменную?
    #37706588
Irhen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

Про "Условное форматирование" знаю. Но наперед неизвестно количество строк в таблице. Накладывать же условное форматирование на максимальное количество строк в листе, мне кажется неразумным.

начинаю склонятся к Вашему предложению - явно прописывать свойства формата.
Неудобно конечно - в строке доастсточно много ячеек и у каждой может быть свой формат.

С копированием формата на небольшом количестве строк все было проще и удобней :-)

Спасибо за помощь. Если есть идеи - буду благодарен.

А все же, чисто для общего развития - возможно ли скопировать диапазон и куда-то сохранить содержимое буфера? включая форматирование и значения в общем случае?
...
Рейтинг: 0 / 0
Selection.Copy - как сохранить формат в переменную?
    #37706818
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IrhenНакладывать же условное форматирование на максимальное количество строк в листе, мне кажется неразумным.Расплывчатое "кажется неразумным" на самом деле означает "не знаю, потому боюсь".
Это стандартная практика, для этого условное форматирование и сделали встроенной фичей, не зависящей от тормозных макросов. Формат можно накладывать на диапазон, диапазоном может быть вся колонка независимо от количества реально используемых строк.

IrhenА все же, чисто для общего развития - возможно ли скопировать диапазон и куда-то сохранить содержимое буфера? включая форматирование и значения в общем случае?Теоретически да.
...
Рейтинг: 0 / 0
Selection.Copy - как сохранить формат в переменную?
    #37706856
Irhen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyIrhenвозможно ли скопировать диапазон и куда-то сохранить содержимое буфера? включая форматирование и значения в общем случае?Теоретически да. А практически - куда?
...
Рейтинг: 0 / 0
Selection.Copy - как сохранить формат в переменную?
    #37706872
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Практически — сюда для общего развития, и сюда для конкретики.
...
Рейтинг: 0 / 0
Selection.Copy - как сохранить формат в переменную?
    #37706927
Irhen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyIrhenНакладывать же условное форматирование на максимальное количество строк в листе, мне кажется неразумным. Формат можно накладывать на диапазон, диапазоном может быть вся колонка независимо от количества реально используемых строк.
.
Вы знаете, условное форматирование не позволит назначить высоту строки и горизонтальное-вертикальное выравнивание в ячейке .

Оно конечно имеет право на применение, но на большом объеме отрабатывает весьма долго - в моем случае для определения формата КАЖДОЙ ячейки в строке будет проверяться значение ячейки с номером формата.
то есть значение будет проверяться не для строки, а для каждой ячейки в строке

...плюс умножить на возможное количество форматов

Необходимо форматировать ячейки в строке. В разных строках в одной и той же колонке могут быть разные форматы и наоборот - поэтому условным форматированием столбцов красиво решить данную задачу не получиться.


Не подходит.
...
Рейтинг: 0 / 0
Selection.Copy - как сохранить формат в переменную?
    #37706932
Irhen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
посматриваю в сторону стилей, но в моем случае - 10 видов форматов строк, содержащих 80 столбцов, получается 800 стилей...
Длительность применения стилей прямо прапорциональна кол-ву накладываемых стилей
...
Рейтинг: 0 / 0
Selection.Copy - как сохранить формат в переменную?
    #37707015
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оно конечно имеет право на применение, но на большом объеме отрабатывает весьма долго - в моем случае для определения формата КАЖДОЙ ячейки в строке будет проверяться значение ячейки с номером формата.Гарантирую, макросами дольше. Впрочем, ввиду предыдущего условия, вариантов не остается. И если вы хотите скорости, забудьте про буфер обмена совсем. Даже через апи работа с ним будет медленнее чем вообще без него.
...
Рейтинг: 0 / 0
Selection.Copy - как сохранить формат в переменную?
    #37707073
Irhen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy если вы хотите скорости, забудьте про буфер обмена совсем. Даже через апи работа с ним будет медленнее чем вообще без него.
Спасибо за совет !
...
Рейтинг: 0 / 0
Selection.Copy - как сохранить формат в переменную?
    #37707387
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 сек
...
Рейтинг: 0 / 0
Selection.Copy - как сохранить формат в переменную?
    #37707399
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Irhen
> Новая хрень:
> ActiveWorkbook.Sheets("report").Range("REPORT_ZONE").Font.Bold = true
> занимает минуту....

Установка жирного шрифта занимает в первый раз продолжительное время по простому нажатию Ctrl+B

Тянется ещё(когда я на это обратил внимание) года этак с 98-2000. Решения сразу не нашел, поэтому забил и не парюсь.


P.S. Как вариант, можно присваивать жирность в первый раз одной ячейке, при этом подгружаются шрифты(и если шрифтов
много, это занимает длительное время) и после этого начинать ковровое бомбометание по площадям

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Selection.Copy - как сохранить формат в переменную?
    #37707434
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
With ActiveWorkbook.Sheets("report").Range("REPORT_ZONE").Font
    .Name = arial
    .Size = 22
    .Bold = true
End With

Прирост производительности для этих трех строк в такой форме составит 60-70%.

PS: К тому же название шрифта без кавычек.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Selection.Copy - как сохранить формат в переменную?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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