2016-11-11 4 views
0

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

Но мне также нужна функциональность кнопки, которая просматривает выбранные ячейки, находит любые существующие границы и превращает их в белые. Perhabs, имея логическое или что-то проверяющее, если цвет фона черный, а затем превращение существующих границ в белый. Мне не нужно создавать какие-либо новые границы, а только инвертировать цвета существующих.

Это то, что я уже есть, но это только делает все границы белые:

Dim Background As Boolean 
Dim cel As Range 
Dim selectedRange As Range 

Set selectedRange = Application.Selection 

With Selection.Borders 

    For Each cel In selectedRange.Cells 
    If cel.Borders(xlEdgeTop).LineStyle <> xlLineStyleNone Then 
      .Color = RGB(255, 255, 255) 
     End If 

    If cel.Borders(xlEdgeBottom).LineStyle <> xlLineStyleNone Then 
      .Color = RGB(255, 255, 255) 
     End If 

    Next cel 
End With 

надеюсь, что вы в состоянии помочь мне :)

+1

Что вы пробовали? Вы можете легко проверить цвет фона ячейки. Что вы подразумеваете под определением существующих границ? У вас есть скрытые границы (то есть linestyle = xlNone)? Если это так, я думаю, что установка цвета в белый цвет не должна изменять видимость. – arcadeprecinct

+0

Спасибо, что ответили! Да, у меня уже есть проверка фона, которая работает нормально, но я могу найти способ сделать все границы белыми. Угадайте, что моя борьба - это поиск пути к просмотру выбранных ячеек, проверка наличия границ и их цвет. Балансы и т. Д. Всегда будут выполняться на белом фоне, поэтому «существующие границы» будут такими: https://www.google.dk/search?q=p%26l&espv=2&biw=1680&bih=920&source = lnms & tbm = isch & sa = X & ved = 0ahUKEwjkjerLvaDQAhUEhSwKHfoAAukQ_AUIBigB # imgrc = Tc86lvwlvv40gM% 3A Нет скрытых границ, все видимые – Stef

ответ

0

Вы претендуете цвет каждому граница в коллекции Selection.Borders, потому что это переменная With. Просто установите цвет cel.Borders(xlEdgeTop)

Dim cel As Range 
Dim selectedRange As Range 

Set selectedRange = Application.Selection 
For Each cel In selectedRange.Cells 
    With cel.Borders 
     If .Item(xlEdgeTop).LineStyle <> xlLineStyleNone Then 
      .Item(xlEdgeTop).Color = vbWhite 
     End If 

     If .Item(xlEdgeBottom).LineStyle <> xlLineStyleNone Then 
      .Item(xlEdgeBottom).Color = vbWhite 
     End If 
    End With 
Next cel 

Вы также можете использовать два With блока: With cel.Borders(xlEdgeTop) и With cel.Borders(xlEdgeBottom), а затем просто использовать .LineStyle и .Color. Вы также можете пропустить блок With, потому что он здесь действительно не экономит (cel.Borders ->.Item).

+0

Спасибо, это работает отлично! – Stef

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

  • Нет связанных вопросов^_^