|
Вопрос # 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 (статус: Студент), 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
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|