2013-07-10 5 views
0

Эксперт, пожалуйста, помогите. Следующий код VBA работает в excel 2010, но не в 2007 году. В нем отображается ошибка «приложение или объект не определены». Кажется, что «selection.FormatConditions.Font» не поддерживается.Условное форматирование в макросе VBA, не работающем в Excel 2007

Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _ 
    Formula1:="=""BREAK TOP""" 
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority 
With Selection.FormatConditions(1).Font 
    .Color = -16752384 --- Error: application and object undefined 
    .TintAndShade = 0 
End With 

Большое спасибо!

+1

Это [поддерживается в Excel 2007] (http://msdn.microsoft.com/en-us/library/office/bb223827 (v = office.12) .aspx) по ссылке Dev. Я тестирую код в 2010 году, и он работает. В любом случае, если проблема '.Font' была проблемой, ошибка возникла бы в строке' With Selection.FormatConditions (1) .Font', а не '.Color'. –

+0

@DavidZemens Спасибо! Если прокомментировать «.Color» и «.TintAndShade», программа может работать без ошибок. Я уже обновил пакет совместимости с Microsoft, но все равно это не помогает. Прошу совета! – rpg

+0

Я думаю, вам нужно использовать назначение цвета «RGB» в 2007 году. Это не работает с отрицательными значениями цвета. Я отправлю более подробный ответ. –

ответ

0

Я не могу проверить это в Excel 2007, но ошибка, безусловно, не с объектом FormatConditions.Font. Ошибка повышается в соответствии с вашим запросом .Font.Color.

Рассмотрение ссылки dev для объекта .Font в 2007 году, кажется, что вы должны использовать формулу RGB() для назначения цвета.

http://msdn.microsoft.com/en-us/library/office/bb213182(v=office.12).aspx

Однако мой Google-фу указывает на то, что вы не можете использовать отрицательное значение цвета с RBG задания. Думаю, вам нужно будет выбрать другой цвет. Возможно, есть несколько способов использования WinAPI, но я не могу проверить этот подход на данный момент.

Я выбрал еще один синий, похожий по оттенку на ваш -16752384.

Sub test() 

'## This section converts a long color to its R/G/B components 
    Dim col As Long: col = 15773696 
    Dim r As Long, g As Long, b As Long 
    r = col Mod 256 
    g = (col \ 256) Mod 256 
    b = (col \ 256 \ 256) Mod 256 

'## Your code, with modification for the RGB Formula: 
    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _ 
     Formula1:="=""BREAK TOP""" 
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority 
    With Selection.FormatConditions(1).Font 
     .Color = RGB(r, g, b) '<-- RGB Formula, here. 
     .TintAndShade = 0 
    End With 


End Sub 

UPDATE

Попробуйте это, не используйте Selection объект.

Sub test2() 

Dim rng as Range 
Dim fc as FormatCondition 
Set rng = Range(Selection.Address) 

'## This section converts a long color to its R/G/B components 
    Dim col As Long: col = 15773696 
    Dim r As Long, g As Long, b As Long 
    r = col Mod 256 
    g = (col \ 256) Mod 256 
    b = (col \ 256 \ 256) Mod 256 

'## Your code, with modification for the RGB Formula: 
    rng.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _ 
     Formula1:="=""BREAK TOP""" 
    rng.FormatConditions(rng.FormatConditions.Count).SetFirstPriority 

    Set fc = rng.FormatConditions(1) 
    fc.Font.Color = RGB(r, g, b) '<-- RGB Formula, here. 
    fc.Font.TintAndShade = 0 

End Sub 
+0

Спасибо! Однако я по-прежнему получал такую ​​же ошибку. Я попытался проверить его, поставив «.Color = 3», но «ошибка 1004: приложение и объект не определены» все еще появились. Пожалуйста помоги! – rpg

+0

Если вы положили '.Color = 3', то вы сделали ** не ** попробовать то, что я предложил. Попробуй еще раз. Скопируйте мой код и запустите его. Дайте мне знать, если это сработает. –

+0

Привет, Дэвид, я пробовал как ваш код, так и мой. Оба останавливаются в одном месте и показывают ту же ошибку. Большое спасибо!! – rpg

Смежные вопросы