|
VBA - Копирование строк не занимая буффер обмена
|
|||
---|---|---|---|
#18+
Проблема следующая, нужно выгрузить в шаблон много строк (через OLE). В шаблоне естественно красиво отрисована только 1 строка, которую нужно размножить. Сейчас делается это с помощью команды Range.Copy, которая занимает буффер обмена пользователя - 1) стирает его, 2) не дает им пользоваться, пока формируется выгрузка, что может занимать до 20 минут. Как реализовать подобное не занимая системный буффер? Примерно так это выглядит сейчас: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 11:29 |
|
VBA - Копирование строк не занимая буффер обмена
|
|||
---|---|---|---|
#18+
Если нужно скопировать только значения, можно сделать присвоение напрямую Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 11:39 |
|
VBA - Копирование строк не занимая буффер обмена
|
|||
---|---|---|---|
#18+
Shocker.ProЕсли нужно скопировать только значения, можно сделать присвоение напрямую Код: vbnet 1.
Нет, естественно если я выгружаю в шаблон, то там красивое форматирование у каждой строки. Нужно его полностью перенести, а содержимое (значения) разные. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 11:48 |
|
VBA - Копирование строк не занимая буффер обмена
|
|||
---|---|---|---|
#18+
Вариант отрисовывать все из кода не предлагать. :) Иначе какой смысл в шаблоне тогда. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 11:50 |
|
VBA - Копирование строк не занимая буффер обмена
|
|||
---|---|---|---|
#18+
Но ведь при вставке строки все форматирование по идее дублируется на вставленную строку. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 11:59 |
|
VBA - Копирование строк не занимая буффер обмена
|
|||
---|---|---|---|
#18+
Shocker.ProНо ведь при вставке строки все форматирование по идее дублируется на вставленную строку. Да действительно почти все форматирование переносится, кроме ГРАНИЦ (Border'ов). Может шаблон кривоват? Попробую провести эксперименты. С шаблонами вечно проблема с этими границами. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 12:20 |
|
VBA - Копирование строк не занимая буффер обмена
|
|||
---|---|---|---|
#18+
Проверьте, что у вас точно отрисованы, например, нижние границы ячеек "красивой" строки, а не верхние следующей строки... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 12:23 |
|
VBA - Копирование строк не занимая буффер обмена
|
|||
---|---|---|---|
#18+
AndreTMПроверьте, что у вас точно отрисованы, например, нижние границы ячеек "красивой" строки, а не верхние следующей строки... Тут вообще у Экселя крышу сносит по-моему. Вот прикладываю пример. Встаем на 12 строку, нажимаем вставить, формат как сверху. В итоге формат берется как сверху, а разметка границ как в строке до этого. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 12:44 |
|
VBA - Копирование строк не занимая буффер обмена
|
|||
---|---|---|---|
#18+
У 12-й строки границы тонкие. Толстые границы у соседних строк. Нужно выделить 12-ю строку и принудительно поставить ей толстые границы. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 12:49 |
|
VBA - Копирование строк не занимая буффер обмена
|
|||
---|---|---|---|
#18+
Shocker.ProУ 12-й строки границы тонкие. Толстые границы у соседних строк. Нужно выделить 12-ю строку и принудительно поставить ей толстые границы. Не понял о каких границах идет речь. Приложил, что у меня получается. С столбцов 5-9, нет боковых границ как в строке образце. Т.е. они взялись из 12 строки, а не из 11. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 12:52 |
|
VBA - Копирование строк не занимая буффер обмена
|
|||
---|---|---|---|
#18+
Можно от обратного пойти: заформатировать все строки в шаблоне, сбросить данные, удалить лишние строки с форматом. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 13:15 |
|
VBA - Копирование строк не занимая буффер обмена
|
|||
---|---|---|---|
#18+
sergeyvgМожно от обратного пойти: заформатировать все строки в шаблоне, сбросить данные, удалить лишние строки с форматом. Нет это совершенно не годится, какой-то костыльный метод. Отчетов\шаблонов у меня десятки видов. Бывает тройная иерархия которую нужно копировать. И отчеты с большим количеством строк, я не могу угадать на каком слое иерархии сколько строк в итоге окажется. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 13:24 |
|
VBA - Копирование строк не занимая буффер обмена
|
|||
---|---|---|---|
#18+
Еще вариант двойного чтения, тоже костыльный:), но без использования clipboard. - считали данные, с учетом данных копируете по такой схеме (данные затираются копированием) Rows("24:27").Copy Destination:=Rows(32) - снова считали данные ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 13:45 |
|
VBA - Копирование строк не занимая буффер обмена
|
|||
---|---|---|---|
#18+
sergeyvgЕще вариант двойного чтения, тоже костыльный:), но без использования clipboard. - считали данные, с учетом данных копируете по такой схеме (данные затираются копированием) Rows("24:27").Copy Destination:=Rows(32) - снова считали данные 1) Не понял, где тут двойное чтение и что вообще делать. 2) Почему тут без clipboard, если тут та же самая COPY, класса Range которая работает через него? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 13:53 |
|
VBA - Копирование строк не занимая буффер обмена
|
|||
---|---|---|---|
#18+
KeeperRUбез clipboard, если тут та же самая COPY, класса Range которая работает через него Это не так... Range .Copy без параметра - использует буфер, с параметром - не использует. Но вы и так уже в своем дельфийском коде используете параметр Destination , sergeyvg , видимо, этого просто не учел. Я вот только не понимаю, на каком этапе вы умудряетесь затирать буфер обмена? Как вариант - не используйте .Copy. Вернее, заполняйте лист значениями через коллекцию .Cells, а форматирование - накладывайте до/после заполнения на весь диапазон разом, используя PasteSpecial ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 14:11 |
|
VBA - Копирование строк не занимая буффер обмена
|
|||
---|---|---|---|
#18+
AndreTMЭто не так...я попробовал Код: vbnet 1.
затирает буфер. Хотя у меня сначала тоже было ощущение, что не затирало, по крайней мере раньше. Может быть дело в версии экселя, я попробовал в 2010. Сейчас в более ранней проверить не могу ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 14:15 |
|
VBA - Копирование строк не занимая буффер обмена
|
|||
---|---|---|---|
#18+
Copy Destination:= вроде без буфера обмена работает Идея в чем, считав данные вы через Copy Destination:= затираете их, но таким образом форматируете нужные строки, а после снова зачитываете данные на уже отформатированные строки. Это конечно сработает, если один в один зачитываются данные, да и то это теоретически, на практике может перенос по словам не отработать или еще что-то, если, например, через OLE вставка данных будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 14:45 |
|
VBA - Копирование строк не занимая буффер обмена
|
|||
---|---|---|---|
#18+
Через PasteSpecial пытался сделать, но все равно буффер затирается, даже если COPY без параметров. Код: vbnet 1. 2.
Как еще передать в PasteSpecial, тот Range откуда я хочу скопировать формат? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 14:46 |
|
VBA - Копирование строк не занимая буффер обмена
|
|||
---|---|---|---|
#18+
sergeyvgCopy Destination:= вроде без буфера обмена работает Идея в чем, считав данные вы через Copy Destination:= затираете их, но таким образом форматируете нужные строки, а после снова зачитываете данные на уже отформатированные строки. Это конечно сработает, если один в один зачитываются данные, да и то это теоретически, на практике может перенос по словам не отработать или еще что-то, если, например, через OLE вставка данных будет. Проверил оба варианта, буффер затирается. Точка останова ставлю, четко вижу момент когда данные из буффера пропадают. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 14:47 |
|
VBA - Копирование строк не занимая буффер обмена
|
|||
---|---|---|---|
#18+
Понимаете, у нас нет Дельфи :) А в самом Excel VBA сначала код написать не пробовали? Чтобы понять, где адаптация нужна? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 15:33 |
|
VBA - Копирование строк не занимая буффер обмена
|
|||
---|---|---|---|
#18+
AndreTMПонимаете, у нас нет Дельфи :) А в самом Excel VBA сначала код написать не пробовали? Чтобы понять, где адаптация нужна?AndreTM - у меня затирается при выполнении непосредственно в экселе. Win7x64, Excel2010 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 15:38 |
|
VBA - Копирование строк не занимая буффер обмена
|
|||
---|---|---|---|
#18+
Нашел по какому запросу гуглить проблему: https://www.google.ru/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#newwindow=1&q=excel copy format without clipboard Но подходящих решений не нашел, что ж такое а. Похоже самое тупое в лоб решение, считывать буфер обмена перед операцией, а потом возвращать назад. :D Все остальные решения либо слишком сложные, либо требуют много доп. кодирования в куче мест, изменения в шаблонах. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 15:41 |
|
VBA - Копирование строк не занимая буффер обмена
|
|||
---|---|---|---|
#18+
Shocker.Pro, Не-не... Я бы предложил (если уж из самого Excel'я рассматривать) такой вариант: - Скопировать диапазон-"красивый шаблон" в отдельную объектную переменную . Тем более, что в "шаблоне" нет данных, одно оформление. - Далее наполняем результирующий лист диапазонами: -- сначала копируем свой диапазон-переменную в свободный диапазон результата (получаем оформление) -- затем наполняем диапазон уже на листе результата нужными значениями ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 16:22 |
|
VBA - Копирование строк не занимая буффер обмена
|
|||
---|---|---|---|
#18+
AndreTMShocker.Pro, Не-не... Я бы предложил (если уж из самого Excel'я рассматривать) такой вариант: - Скопировать диапазон-"красивый шаблон" в отдельную объектную переменную . Тем более, что в "шаблоне" нет данных, одно оформление. - Далее наполняем результирующий лист диапазонами: -- сначала копируем свой диапазон-переменную в свободный диапазон результата (получаем оформление) -- затем наполняем диапазон уже на листе результата нужными значениями Пример реализации на VBA можно? Что за объектная переменная? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 16:35 |
|
VBA - Копирование строк не занимая буффер обмена
|
|||
---|---|---|---|
#18+
тут пример блокировки/разблокировки буфера обмена, но большинство программ не сообщают, что буфер недоступен и копирование в буфер из параллельной программы может просто ничего не сделать по Ctrl-C http://www.sql.ru/forum/480283/sohranenie-fayla-iz-excel ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2014, 16:40 |
|
|
start [/forum/topic.php?fid=60&msg=38786455&tid=2156155]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
62ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 169ms |
0 / 0 |