|  | 
| 
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?desktop=1&fid=60&tid=2156155]: | 0ms | 
| get settings: | 10ms | 
| get forum list: | 14ms | 
| check forum access: | 4ms | 
| check topic access: | 4ms | 
| track hit: | 41ms | 
| get topic data: | 10ms | 
| get forum data: | 2ms | 
| get page messages: | 56ms | 
| get tp. blocked users: | 2ms | 
| others: | 13ms | 
| total: | 156ms | 

| 0 / 0 | 
