Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 579

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
У меня в программе в отчетах используется команда:
Range.Borders[i].LineStyle := 1;
Программа работает, т.е. формирует отчеты в Office XP c установленными SP1, SP2. В офисе 2007 тоже работает.
А в офисе 2003 выдается ошибка, хотя SP тоже установила.
Ошибка:
"Нельзя установить свойство LineStyle класса Border"
Подскажите, пожалуйста, как решить эту проблему.

Наташа Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задала: Наташа (статус: Посетитель)
Вопрос отправлен: 13 мая 2008, 13:32
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: ANBsoft

Здравствуйте, Наташа!
У Вас используется команда Range.Borders[i].LineStyle := 1;
Проблема может произойти при выходе "i" за рамки, обрабатываемые екселем, проверьте пошагово.
Если не ошибаюсь, Range задается так Range[Cells[x1,y1],Cells[x2,y2]].
Если это не поможет, напишите аналогичный макрос в самом екселе и проверьте как он будет работать.
У меня похожие ошибки вылетали только при установке какого-либо из свойств PageSetup если в системе не было установлено ни одного принтера.
Успехов.

Ответ отправил: ANBsoft (статус: Студент)
Время отправки: 13 мая 2008, 18:49
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 3; последнее сообщение — 14 мая 2008, 08:55; участников в обсуждении: 3.
Вадим К

Вадим К (статус: Академик), 13 мая 2008, 22:38 [#1]:

Скорее всего проблема не в екселе, а в ОС. вот если бы не работало на 2007, а в остальных работало - то тут точно виноват ексель.

Также встречал проблемы, если ексель русский.
Галочка "подтверждения прочтения" - вселенское зло.
Наташа

Наташа (статус: Посетитель), 14 мая 2008, 08:07 [#2]:

Спасибо. Я разобралась и теперь все работает (ниже привожу описание, как добилась того, чтобы не было такой ошибки). Правда не знаю, почему же тогда в других версиях офиса все работает без этих проверок?

Ошибка "Нельзя установить свойство LineStyle класса Border" возникает при использовании различных областей (Range).
Если Вам заранее область не известна, в которой надо применить LineStyle, то надо обязательно делать проверку на вид области Range.
Рассмотрим варианты:
Если областью является одна ячейка таблицы Excel, то Borders Index должен быть равен от 7 по 10 (For Index := 7 to 10 do Range.Borders[Index].LineStyle := 1;).
Если область содержит одну строку и несколько столбцов (больше одного), то Borders Index должен быть равен от 7 по 11
(For Index := 7 to 11 do Range.Borders[Index].LineStyle := 1;).
Если область содержит одну строку и несколько столбцов (больше одного), то Borders Index должен быть равен от 7 по 11
(For Index := 7 to 11 do Range.Borders[Index].LineStyle := 1;).
Если область содержит несколько строк и столбцов, то Borders Index должен быть равен от 7 по 12
(For Index := 7 to 12 do Range.Borders[Index].LineStyle := 1;).
Если область содержит один столбец и несколько строк (больше одной), то Borders Index должен быть равен от 7 по 10 и 12, т.е. Index=11 надо исключить.
ANBsoft

ANBsoft (статус: Студент), 14 мая 2008, 08:55 [#3]:

В общем то логично, сам ексель пишет так (смотрим ниже).
Тоесть есть следующие варианты: сверху, снизу, справа, слева, вертикальные внутри диапазона, горизонтальные внутри диапазона.
И например вертикальные внутри диапазона нельзя применить для одного столбца, там их нет.

With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:36
Выполнено за 0.02 сек.