2016-11-11 6 views
0

Ich erstelle eine Schaltfläche für eine Symbolleiste zum Ändern der Farben von weißem Hintergrund, schwarzer Schrift, weißer Schrift schwarzen Hintergrund innerhalb eines ausgewählten Bereichs. (wird für Tabellen wie P & L's, Bilanzen usw. in der Buchhaltung verwendet werden).Schleife durch ausgewählte Zellen, überprüfen Sie auf Grenzen und ändern Sie die Farbe

Aber ich brauche auch einige Funktionen in der Schaltfläche, die durch die Zellen, die ausgewählt sind, sucht, sucht alle vorhandenen Grenzen und macht sie weiß. Perhabs, indem ein Boolescher Wert oder etwas überprüft wird, wenn die Hintergrundfarbe schwarz ist, und vorhandene Ränder weiß werden. Ich brauche keine neuen Grenzen zu setzen, sondern nur die Farben der vorhandenen umzukehren.

Dies ist, was ich habe schon haben, aber es macht einfach alle Grenzen wissen:

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 

Hoffnung, die Sie mir helfen :)

+1

Was haben Sie bisher versucht? Sie können die Hintergrundfarbe einer Zelle leicht überprüfen. Was meinst du damit, die bestehenden Grenzen zu finden? Haben Sie versteckte Grenzen (d. H. Linestyle = xlNone)? Wenn dem so ist, sollte die Einstellung der Farbe auf Weiß die Sichtbarkeit nicht ändern. – arcadeprecinct

+0

Vielen Dank für Ihre Antwort! Ja, ich habe bereits den Hintergrund-Check, der funktioniert, aber ich finde nur einen Weg, um alle Ränder weiß zu machen. Ich denke, mein Kampf besteht darin, einen Weg zu finden, durch die ausgewählten Zellen zu schauen, zu prüfen, ob es Grenzen gibt und sie weiß zu färben. Die Bilanzen usw. würden immer auf einem weißen Hintergrund gemacht, also würden die "vorhandenen Grenzen" so sein: https://www.google.dk/search?q=p%26l&espv=2&biw=1680&bih=920&source = lnm & tbm = isch & sa = X & ve = 0ahUKEwjkjerLvaDQAhUEhSwKHfoAAukQ_AUIBigB # imgrc = Tc86lvwlvv40gM% 3A Es gibt keine versteckten Grenzen, alle sichtbar – Stef

Antwort

0

Sie die Farbe zu jedem anwenden sind in der Lage Grenze in der Selection.Borders Sammlung, denn das ist die With Variable. Nur stellen Sie die Farbe des 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 

Sie auch zwei With Blöcke verwenden: With cel.Borders(xlEdgeTop) und With cel.Borders(xlEdgeBottom) und dann nur .LineStyle und .Color verwenden. Sie könnten auch den With Block ganz überspringen, weil es hier wirklich nicht viel spart (cel.Borders ->.Item).

+0

Danke, das funktioniert perfekt! – Stef

Verwandte Themen