![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 25.08.2008
Сообщений: 159
|
![]()
Вот кусок кода, который копирует границы ячеек с одного "Range" на другой:
Код:
![]() Код:
Код:
В чем дело? почему я не могу присвоить стиль ![]() ![]() ![]() Посоветуйте что-нибудь, пожалуйста. |
![]() |
![]() |
![]() |
#2 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]()
Считывая значение одного из свойств границы FromRange.Borders(br), Вы считываете это свойство из первой ячейки этого диапазона.
При записи же свойства: ToRange.Borders(br).свойство = .свойство оно применяется ко всему диапазону ячеек. То есть, фактически, Вы копируете форматирование первой ячейки на диапазон ячеек. Добиться копирования границ ячеек можно намного проще: Код:
Код:
|
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 25.08.2008
Сообщений: 159
|
![]()
Еще раз спасибо EducatedFool. Не хватает знаний, в который раз изобретаю велосипед...
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 25.08.2008
Сообщений: 159
|
![]()
EducatedFool, првоерил кусок кода... не то:
дело в том, что я копирую границы не между одинаковыми по размеру массивами ячеек: т.е. у меня есть образец таблицы, а макросом я строю подобную таблицу, однако размеры ее могут не соответствовать размерам образца. Для примера: в образце есть ячейка которая была получена путем объединения других ячеек (шапка таблицы - 8 ячеек в одной строке), а в новой таблице шапка состоит из 12 ячеек (в одной строке), если я пользуюсь PastSpecial xlPasteFormats, то Excel разбивает мою большую ячейку на две: одну на ячейку состоящую из 8 объеденных ячеек (как в образце), оставшиеся ячейки разъеденияет. А мне так не надо... надо чтобы скопировались только границы. делать "поячеечно" - уже понятно не получится, ячеек в двух диапазонах разное количество. Я предпочитаю перебирать границы именно диапазона. В моем первом макросе (см первй пост) я проверял (msgbox'ом) какие значения у границ копируемого диапазона (FromRange....LineStyle), и они все совпадают с реальными. Не могу понять элементарного, почему не присваивается это значение ToRange....LineStyle. Что бы было проще понять, прикрепил то, чем занимаюсь - автомат по бухучету... ![]() В модуле "Vars" есть sub copyBorders(....), именно он и копирует все что надо, а значит и внем проблема. P.S. для проверки открой лист "Счета", дважды щелкни по "не отображать" напротив какого-нибудь счета (лучше 50) и посмотри. Последний раз редактировалось tolikman; 15.06.2009 в 13:15. |
![]() |
![]() |
![]() |
#5 | ||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]() Цитата:
Пытался найти ошибку в модулях класса - но не осилил (очень много букв) В случае с объединёнными ячейками скопировать форматирование не получится. Тут проще макросом прорисовать нужные линии в нужных местах, чем копировать форматирование с таблицы с другой структурой. Цитата:
Причем, если количество столбцов во вновь создаваемых таблицах отличается, то можно программно добавлять столбцы между существующими - форматирование для новых столбцов будет взято с соседних. Короче говоря, из файла я так и не понял, на основании каких данных что создаётся. В любом случае, Вы сильно усложняете решение. |
||
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 25.08.2008
Сообщений: 159
|
![]()
Какие ошибки? у меня полноценно генерируется счет (кроме проблемы с LineStyle'ом таблиц) со всеми корр.счетами и все грамотно, ошибок не вылетает. К тому же он еще не закончен.
Добавлять столбцы будет как раз сложнее, чем сразу выставлять рассчитанные размеры. а в файле все просто на самом деле: есть Журнал РХО (Журнал регистрации хозяйственных операций) в каждой строке этого журнала написано когда, с какого счета на какой счет и какая сумма переводится. лист "Счета" генерируются автоматически при щелчке по нему (точнее при активации). Выбирая конкретный счет - создается или находится лист с именем счета (в качестве имени - немер счета) и на этом листе строится таблица. Прообраз этой таблицы нахидится на листе "Образец счета". и все. |
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 25.08.2008
Сообщений: 159
|
![]()
Люди, пожалйста помагите
![]() вот прикрепил простой пример, ничего лишнего нет. Обратите внимание: копируется все кроме того момента, когда линия отсутствует (самая верхняя в диапазоне, она появляется при копировании). Почему? |
![]() |
![]() |
![]() |
#8 | ||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]() Цитата:
Повторить? Цитата:
![]() PS: Линии рисует строка ToRange.Borders(br).Weight = .Weight Поменяйте порядок строк в макросе: сначала ToRange.Borders(br).Weight = .Weight потом ToRange.Borders(br).LineStyle = .LineStyle
__Полезные надстройки для Excel. Парсинг сайтов и файлов.
![]() Последний раз редактировалось EducatedFool; 17.06.2009 в 18:44. |
||
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 25.08.2008
Сообщений: 159
|
![]()
EducatedFool, спасибо за подсказку в PS, попробую.
Не надо на меня кричать... ))) я прекрасно понимаю, что если в копируемой таблице будут совершенно разные границы между ячейками, то будет копироваться только первая ячейка! мне нужен этот макрос чтобы копировать таблицу с 'одинаковыми' границами. Меня интересовало только то, почему (даже на вашем эксперименте) "пустая" линия превращается в тоненькую... проверяю.... УРА! Все отлично заработало!!! БОЛЬШОЕ СПАСИБО!!! |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Задачка однако! | Nixtone | Помощь студентам | 8 | 15.11.2007 17:27 |