Странные ошибки при чтении свойств FormatCondition - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть FormatCondition, cf1.Я делаю следующее:

Dim WS As Worksheet
Dim fcs As FormatConditions
Dim cf1 As FormatCondition
Dim b1 As Border

Set WS = ActiveSheet
Set fcs = WS.Cells.FormatConditions
Set cf1 = fcs.item(1)
Set b1 = cf1.Borders.item(xlEdgeBottom)

Dim ls As XlLineStyle
ls = b1.LineStyle

Если я попытаюсь прочитать b1.LineStyle в окне Immediate или присвоить его переменной (согласно последней строке выше), я получу

Ошибка 1004: «Невозможно получить свойство LineStyle класса Border»

(Это та же строка ошибки в списке наблюдения, но без номера ошибки)

Я получаючто-то похожее для b1.Weight

Это происходит независимо от того, есть ли линия на границе условного формата или нет, что, безусловно, не может быть правильным.Если для этого формата действительно нет стиля линии, я думаю, что LineStyle должен быть xlLineStyleNone, а если есть стиль линии, то, несомненно, он должен быть читаемым?

Кто-нибудь знает, что происходит?и как я могу это исправить?

Обратите внимание: я посмотрел на найденные границы, и некоторые другие свойства границ кажутся правильными (то есть Color=0 и ColorIndex либо -4142, либо-4105).ThemeColor и TintAndShade равны Null, а Creator равно xlCreatorCode.

Я нашел некоторые ссылки на проблемы в настройке LineStyle и Weight, и те сказали, чтолист был заблокирован.Насколько я знаю, здесь дело обстоит иначе.


ДОПОЛНЕНИЕ: Иногда я получаю другую ошибку при попытке прочитать b1.ThemeColor.

'Приложение-определенная или объектно-определяемая ошибка '

в списке наблюдения или

Ошибка времени выполнения 5:' Недопустимый вызов процедуры или аргумент '

при чтении в немедленном окне.В других случаях это просто Null


ДОПОЛНИТЕЛЬНО: Для cf1.Interior.InvertIfNegative я получаю

'Ошибка приложения или объекта'

в списке наблюдения или

Ошибка времени выполнения 1004: «Ошибка приложения или объекта»

при попытке чтения вНепосредственное окно.

Могут быть и другие, которых я еще не нашел.

1 Ответ

0 голосов
/ 26 ноября 2018

На самом деле я могу воспроизвести проблему, которую вы описываете.

Кажется, проблема в Set b1 = cf1.Borders.item(xlEdgeBottom), что является правильным согласно документации Свойство FormatCondition.Borders .

Но, похоже, есть ошибка, потому что значениеxlEdgeBottom равно 9 (согласно перечислению xlBordersIndex ), и если мы посмотрим на отладку cf1.Borders, мы увидим, что есть только пункт 1… 4 (см. изображение), где 4 кажетсябыть нижней границей.

enter image description here

Если у кого-то еще нет очень хорошей идеи, я бы сказал, что это похоже на ошибку в Excel.

Чтобы обойти это, вы можете использовать, например, Set b1 = cf1.Borders.item(4) для нижней границы.


Так что решение ...

, что Set b1 = cf1.Borders.item(xlBottom) на самом деле работает для меня.

Очевидно, что FormatCondition.Borders не использует правильное перечисление xlBordersIndex , как следует, но вместо этого использует xlTop, xlLeft, xlBottom, xlRight.

Также обратитесь к Границам FormatConditions на одном ребре .

Но все же это не соответствуетcumentation и должно быть ошибкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...