2017-12-21 5 views
0

Ich habe mehrere Tabellen (etwa 200) erstellt, die aus einer Dropdown-Liste der Benutzereingaben generiert werden. Es funktioniert, aber es ist hässlich. Ich habe jedoch über bedingte Formatierung abhängig von der Größe der Tabelle angewendet.Bedingte Formatierung zum Erkennen und Anpassen der Tabellengröße [Excel]

Was ich will, ist so etwas wie dieses: enter image description here

wie unten werden:

enter image description here

Zu wissen, dass ich habe auch einige Tabellen, die wie folgt aussehen:

enter image description here

Wäre es eine Möglichkeit, dies zu tun ?

+0

Sie wollen alle Tabellen dicke Grenzen haben - innen und Umgebung? – QHarr

+0

Und sind sie richtige Excel-Tabellen? d.h. Listenobjekte? – QHarr

+0

Ja Ich möchte, dass alle Tabellen dicke Ränder haben, vorzugsweise dicker in der Umgebung. Sie sind nicht die richtigen Excel-Tabellen, ich fürchte, ich weiß nicht, wie Sie sie als Listobjects setzen. Ich werde jetzt drüber nachdenken! – CommYov

Antwort

1

Sie können durch Tabellen iterieren, indem Sie ListObjects im Arbeitsblatt (oder in der Arbeitsmappe) durchlaufen und die gewünschten Rahmenformate anwenden (die Formatierung erfolgt über den Auswahlfall in der ApplyStyle-Funktion). Erfordert, dass Sie Ihre Tabellen so einrichten, dass sie als Listenobjekte erkannt werden.

Mein Code:

Option Explicit 
Public Sub TEST() 

    Dim edgesArr() 
    edgesArr = Array(xlEdgeLeft, xlEdgeTop, xlEdgeBottom, xlEdgeRight, xlInsideVertical, xlInsideHorizontal) 

    With ActiveSheet 

     Dim tbl As ListObject 

     For Each tbl In .ListObjects 

      FormatTable edgesArr, tbl 

     Next tbl 

    End With 

End Sub 

Public Sub FormatTable(ByVal edgesArr As Variant, ByRef tbl As ListObject) 

    Dim currEdge As Long 

    With tbl.Range 

     For currEdge = LBound(edgesArr) To UBound(edgesArr) 

      ApplyStyle CStr(edgesArr(currEdge)), .Borders(edgesArr(currEdge)) 

     Next currEdge 

    End With 

End Sub 
Public Sub ApplyStyle(ByVal currEdgeText As String, ByVal border As Object) 

    With border 

     .LineStyle = xlContinuous 
     .ColorIndex = xlAutomatic 

     Select Case currEdgeText 

     Case xlInsideVertical, xlInsideHorizontal 

       .Weight = xlMedium 

     Case Else 

       .Weight = xlThick 

     End Select 

    End With 

End Sub 

Sie können den aktuellen Bereich in eine Tabelle mit Syntax konvertieren wie in example unter:

Dim src As Range 
Dim ws As Worksheet 
Set src = Range("B5").CurrentRegion 
Set ws = ActiveSheet 
ws.ListObjects.Add(SourceType:=xlSrcRange, Source:=src, _ 
xlListObjectHasHeaders:=xlYes, tablestyleName:="TableStyleMedium28").Name = "Sales_Table" 
+0

Vielen Dank. Ich werde es versuchen, sobald ich herausgefunden habe, wie meine Tabellen als Listenobjekte erkannt werden können! – CommYov

+0

Vielen Dank für Ihr Update. Bedeutet das, dass ich das Beispiel ausführen muss, das Sie für jeden meiner ~ 200 Tische zur Verfügung gestellt haben? – CommYov

+1

Hängt davon ab, was Sie meinen. Mein Code operiert über alle Tabellen in einem bestimmten Arbeitsblatt, kann aber leicht angepasst werden, um bestimmte Arbeitsblätter oder alle Arbeitsblätter zu wiederholen. Der End-Beispielcode gibt eine Vorstellung davon, wie Sie, wenn Sie Ihren eigenen Code haben, der gerade einen Bereich erstellt hat, diesen Bereich verwenden und ihn in ein Listenobjekt (eine Tabelle) konvertieren können, damit Ihr Prozess etwas tut, Bereich erstellen, Tabelle erstellen aus der reihe, ... tu stuff .... Und am ende ..... mein code .... – QHarr

Verwandte Themen