|
|
|
Как присвоить скопировать Range и не задействовать буфер обмена?
|
|||
|---|---|---|---|
|
#18+
Имеется два листа 1. tmpSheet 2. curSheet. Необходимо Range с tmpSheet перенести на curSheet со всеми значениями, форматированием, шириной столбцов и высотой ячеек и т.д., но не задействовать при этом буфер обмена. С буфером обмена у меня работает следующим образом: На TmpSheet выделяем Range c координатами top, Left, bottom, right следующим образом: tmpSheet.range(tmpSheet.Cells(top, left), tmpSheet.Cells(Bottom, right)).Copy curSheet.Cells(1, 1).PasteSpecial Paste:=xlAll Если кто знает, подскажите пжлст, как сделать это без использования буфера обмена? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2006, 10:44 |
|
||
|
Как присвоить скопировать Range и не задействовать буфер обмена?
|
|||
|---|---|---|---|
|
#18+
Думаю, что только так. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2006, 17:07 |
|
||
|
Как присвоить скопировать Range и не задействовать буфер обмена?
|
|||
|---|---|---|---|
|
#18+
да, так хорошо, но не скопируются ведь все свойства, как получается через clipboard (copy/paste). В данном примере не скопируется формат ячеек, не скопируются границы ячеек и т.д. Что, неужели либо copy/paste, либо все свойства вручную прописывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2006, 18:40 |
|
||
|
Как присвоить скопировать Range и не задействовать буфер обмена?
|
|||
|---|---|---|---|
|
#18+
AshtonДумаю, что только так.Неправильно думаешь Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2006, 20:59 |
|
||
|
Как присвоить скопировать Range и не задействовать буфер обмена?
|
|||
|---|---|---|---|
|
#18+
Ок, я почему-то предполагал, что метод Copy все равно использует буфер обмена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 09:13 |
|
||
|
Как присвоить скопировать Range и не задействовать буфер обмена?
|
|||
|---|---|---|---|
|
#18+
White Owl AshtonДумаю, что только так.Неправильно думаешь Проверил. К сожалению - буфер омена оказывается задействованным ((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 11:03 |
|
||
|
Как присвоить скопировать Range и не задействовать буфер обмена?
|
|||
|---|---|---|---|
|
#18+
dendi_2 White Owl AshtonДумаю, что только так.Неправильно думаешь Проверил. К сожалению - буфер омена оказывается задействованным (((Правда? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 18:19 |
|
||
|
Как присвоить скопировать Range и не задействовать буфер обмена?
|
|||
|---|---|---|---|
|
#18+
White Owl Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Попробую предположить: Их хэлпа по VBA: >>>>>>>>>> Copy method as it applies to the Range object. Copies the range to the specified range or to the Clipboard. expression.Copy(Destination) expression Required. An expression that returns a Range object. Destination Optional Variant. Specifies the new range to which the specified range will be copied. If this argument is omitted, Microsoft Excel copies the range to the Clipboard. <<<<<<<<<<<< То есть, если не указан Destination, то копирование происходит просто в буфер обмена, иначе - значение присваивается объекту назначения. А вот используется ли clipboard при этом методе - тут не написано. Но я так думаю, что используется. Проверяется это достаточно просто (по крайней мере я так проверял): Берется и копируется в буфер обмена любое слово. Потом запускается макрос Код: plaintext 1. 2. 3. 4. 5. И именно из-за очистки в твоем примере макрос и падает на последней строке. То есть ему нечего вставлять. Буфер обмена пуст! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 20:53 |
|
||
|
Как присвоить скопировать Range и не задействовать буфер обмена?
|
|||
|---|---|---|---|
|
#18+
dendi_2И после этого в буфере обмена .... пусто. Отсюда я сделал вывод, что буфер обмена в этом методе был задействван и после этого очищен. И именно из-за очистки в твоем примере макрос и падает на последней строке. То есть ему нечего вставлять. Буфер обмена пуст!Хм... Убедил. Действительно клипбоард чистится.... А ну и фиг с ним, будем считать это фичей :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 22:10 |
|
||
|
Как присвоить скопировать Range и не задействовать буфер обмена?
|
|||
|---|---|---|---|
|
#18+
Просто ну очень надо сделать это, не используюя буфер обмена (((. А может, вообще нет решения кроме копирования чререз буфер или присваивания всех свойств по очереди? Так что вопрос остается открытым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 23:52 |
|
||
|
Как присвоить скопировать Range и не задействовать буфер обмена?
|
|||
|---|---|---|---|
|
#18+
dendi_2Просто ну очень надо сделать это, не используюя буфер обмена (((. А может, вообще нет решения кроме копирования чререз буфер или присваивания всех свойств по очереди? Так что вопрос остается открытым.И что же это за задача такая хитрая? Опиши целиком, скорее всего ее можно решить более простыми методами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2006, 00:23 |
|
||
|
Как присвоить скопировать Range и не задействовать буфер обмена?
|
|||
|---|---|---|---|
|
#18+
[quot White OwlИ что же это за задача такая хитрая? Опиши целиком, скорее всего ее можно решить более простыми методами.[/quot] У меня есть отчетный движок, написанный на VBA. Задача этого движка - получить на входе xml задание, в котором есть данные для построения отчета и имя шаблона. Шаблон заранее настроен, в нем установлены все необходимые свойства ячеек, форматирование, границы и т.д. В xml задании приезжает инфа о том, какие "куски" шаблона нужно взять и поставить в результирующий лист. Причем отчеты не жесткой структуры и один и тот же Range шаблона может быть скопирован в результирующий лист неограниченное количество раз. И при копировании областей шаблона в результирующий лист через клипборд все происходит хорошо, но ... клипборд при этом очишается. С некоторых пор юзеры, пользующие наш софт стали жаловаться, при построении отчета они не могут пользоваться буфером обмена. И, типа, им это очень мешает в работе. Поэтому стал думать о возможностях отвязаться от клипборда, но чаво-та не получается ( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2006, 10:14 |
|
||
|
Как присвоить скопировать Range и не задействовать буфер обмена?
|
|||
|---|---|---|---|
|
#18+
Открыл Excel2000 ввел в ячейку данные скопировал в буфер (нажав два раза ctrl+c) далее запустил данный макрос указав место вставки (как указано в справке) верхний левый угол Код: plaintext 1. 2. 3. 4. 5. данные скоприровались, формат тоже, в буфере лежит то что я положил. Пмойму это то что Вам надо. Или нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2006, 10:39 |
|
||
|
Как присвоить скопировать Range и не задействовать буфер обмена?
|
|||
|---|---|---|---|
|
#18+
нет, не совсем. Такой пример тут уже приводился выше. он не подходит. Если отобразить "буфер обмена office" и смотреть на него до и после выполнения этого макроса - то да, он не очищается. Видимо, потому, что в буфере обмена office может храниться более одного объекта. Но виндовый клипбоард чистится. Для проверки - откройте блокнот, напишете там пару слов и скопируйте в клипбоард. Потом выполните этот макрос и попробуйте из этого клипборда вставить - ничего не вставится, так как там будет пусто! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2006, 10:51 |
|
||
|
Как присвоить скопировать Range и не задействовать буфер обмена?
|
|||
|---|---|---|---|
|
#18+
dendi_2...С некоторых пор юзеры, пользующие наш софт стали жаловаться, при построении отчета они не могут пользоваться буфером обмена. И, типа, им это очень мешает в работе. Поэтому стал думать о возможностях отвязаться от клипборда, но чаво-та не получается ( Сохраняйте буфер обмена перед вашей процедурой, а потом восстанавливайте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2006, 11:28 |
|
||
|
Как присвоить скопировать Range и не задействовать буфер обмена?
|
|||
|---|---|---|---|
|
#18+
Сохраняйте буфер обмена перед вашей процедурой, а потом восстанавливайте. Так не прокатит. Так как отчеты достачно большие и во время построения самого отчета может быть достаточно большим. А во время построения отчета юзеры продолжают работать на машине. И буфер нужен не только до и после построения отчета, но и во время его построения. Уже склоняюсь к мысли написания какой-нибудь dll, которая будет реализовывать мой собственный клипбоард. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2006, 13:49 |
|
||
|
Как присвоить скопировать Range и не задействовать буфер обмена?
|
|||
|---|---|---|---|
|
#18+
dendi_2 Сохраняйте буфер обмена перед вашей процедурой, а потом восстанавливайте. Так не прокатит. Так как отчеты достачно большие и во время построения самого отчета может быть достаточно большим. Но никто же вас не заставляет менять clipboard на все время. Непосредственно при выполнении процедуры Copy-Paste. Это же секунды ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2006, 16:10 |
|
||
|
Как присвоить скопировать Range и не задействовать буфер обмена?
|
|||
|---|---|---|---|
|
#18+
Старый ворчунНо никто же вас не заставляет менять clipboard на все время. Непосредственно при выполнении процедуры Copy-Paste. Это же секунды Кстати, идея. Че-то не подумал сразу)). В общем, как вариант, спасибо. А вопрос опять-таки остался нерешенным. Как вообще обойтись без клипборда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2006, 16:15 |
|
||
|
Как присвоить скопировать Range и не задействовать буфер обмена?
|
|||
|---|---|---|---|
|
#18+
хотя, так тоже плохо. Слишком вырастут накладные расходы. Допустим, я 20 тысяч раз буду чего-то копировать. Соответственно я 20 тысяч раз должен сохранить и восстановить клипборд. Слишком сильно пострадает производительность, так что это все-таки не вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2006, 16:18 |
|
||
|
Как присвоить скопировать Range и не задействовать буфер обмена?
|
|||
|---|---|---|---|
|
#18+
dendi_2хотя, так тоже плохо. Слишком вырастут накладные расходы. Допустим, я 20 тысяч раз буду чего-то копировать. Соответственно я 20 тысяч раз должен сохранить и восстановить клипборд. Слишком сильно пострадает производительность, так что это все-таки не вариант. а вы измерили? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2006, 16:31 |
|
||
|
Как присвоить скопировать Range и не задействовать буфер обмена?
|
|||
|---|---|---|---|
|
#18+
Старый ворчуна вы измерили? Честно - нет, не измерял. Но в любом случае это займет какое-то время. И все равно остается вероятность того, что в момент, когда будет использоваться буфер обмена в нем будет не то, что ожидает пользователь. Хочется вообще отвязаться от буфера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2006, 16:58 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=34082626&tid=2165080]: |
0ms |
get settings: |
6ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
174ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 213ms |
| total: | 459ms |

| 0 / 0 |
