Excel vba Mehrere Bereich Formatieren
#1
Hallo zusammen,

ich schon wieder mit einer Frage bei der ihr mir bestimmt helfen könnt.

Für eine Tabellenvorlage sollen mehrere horizontal / vertikale Linien an verschiedenen Stellen eingefügt werden.

Habe es mal an einem Beispiel versucht. Mit einer horizontalen Linie bekomme ich das hin, benötige diese Linien aber an verschiedenen Stellen, siehe Beispiel-Code.
Wie bekomme ich das mit eine Schleife hin? Zählschleife, Union usw. Was wäre am sinnvollsten und wie setzt man so etwas um?

Code:
Sub FormatColRows()
      Dim rngBereich As Range
      Dim rngZelle As Range
      Dim rngBereich2 As Range
 
  With ActiveSheet
      .Name = "Neue Vorlage"
       
      'Spaltenbreite
      .Range("A:B,D:D,H:I,L:M,O:P,T:U,X:Y").ColumnWidth = 1
      .Range("C:C,E:G,J:K,N:N,Q:S,V:W,Z:AA").ColumnWidth = 11.71
     
      'Horizontal - Linien
      .Range("C16:C16,E16:G16,J16:K16,N16:N16,Q16:T16,V16:W16,Z16:AA16").Activate
      .Range("C30:C30,E30:G30,J30:K30,N30:N30,Q30:T30,V30:W30,Z30:AA30").Activate
      .Range("C32:C32,E32:G32,J32:K32,N32:N32,Q32:T32,V32:W32,Z32:AA32").Activate
     
      Set rngBereich = .Range("C16:C16,E16:G16,J16:K16,N16:N16,Q16:T16,V16:W16,Z16:AA16")
      With rngBereich
        With .Borders(xlEdgeBottom)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        End With
      End With
     
      'Vertikal - Linien
      .Range("C13:C32,H13:H32,O13:O32,T13:T32,X13:X32").Activate
     
      Set rngBereich2 = .Range("C13:C32,H13:H32,O13:O32,T13:T32,X13:X32")
      With rngBereich2
        With .Borders(xlEdgeRight)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        End With
      End With
     
      'Zeilenhöhe
      .Range("A1:A100").RowHeight = 15
     
    End With
End Sub
Top
#2
Hallo,

z.B. so:
Code:
Set rngBereich = Union(Range("C16,E16:G16,J16:K16,N16,Q16:T16,V16:W16,Z16:AA16"), _
Range("C30,E30:G30,J30:K30,N30,Q30:T30,V30:W30,Z30:AA30"), _
Range("C32,E32:G32,J32:K32,N32,Q32:T32,V32:W32,Z32:AA32"))

With rngBereich
    With .Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
End With
Und das Activate Gedöns bitte weglassen.

Gruß Werner
[-] Folgende(r) 1 Nutzer sagt Danke an Werner.M für diesen Beitrag:
  • sharky51
Top
#3
Hallo Werner,

vielen Dank, funktioniert bestens.

Trotzdem noch eine Frage.
Könnte man die einzelnen Bereiche zuerst einem Namen zuweisen, wie rngBereich1, rngBereich2..usw. und dann in eine Union packen.
Der Grund ist einfach der, dass die Linien unterschiedlich sein können, also doppelt, gestrichelt usw. und dann in einer Schleife entsprechen eingefügt werden müssen.

Oder gibt es da eine elegantere Lösung?
Top
#4
Hallo,

keine Ahnung was du da mit einer Schleife willst.
Du legst dir einfach z.B. drei Bereiche an:
Code:
Set rngBereichEinfach = Union(Range(.....), Range(.....), Range(....))
Set rngBereichDoppelt = Union(Range(....), Range(....), Range(...))
set rngBereichGestrichelt = Union(Range(...), Range(...), Range(...))
Und dann für die Linien:
Code:
With rngBereichEinfach
     With .Borders....
          'Code für normale Linie
     End With
With rngBereichDoppelt
     With .Borders....
          'Code für doppelte Linien
     End With
With rngBereich
     With .Borders....
          'Code für gestrichelte Linien
     End With
End With

Gruß Werner
[-] Folgende(r) 1 Nutzer sagt Danke an Werner.M für diesen Beitrag:
  • sharky51
Top
#5
Hallo Werner,

vielen Dank, funktioniert super.

Nun ja ich suche immer eine Lösung die ich verstehen kann Smile , oder mögliche Varianten.
Will ja noch weiter dazulernen!

Habe aber noch eine Anfängerfrage zu der Range-Zusammenstellung.
Kann man sich solche mühsam zusammengebastelte Union-Bereiche auch irgendwie einfacher generieren, ohne dass man im code jeden Zellbereich einzel eingeben muss?
Top
#6
Hallo,

das ginge z.B. mit einer Schleife über die Spalten und Zeilen. Dazu müsste aber eine Regelmäßigkeit vorliegen. Das sehe ich bei dir aber nicht.

Eine Möglichkeit auch für deine Vorgaben:
in einem ersten Schritt erstellst du einen Rangebereich, der alle betroffenen Spalten umfasst
im zweiten Schritt erstellst du einen weiteren Rangebereich, der alle betroffenen Zeilen umfasst

den eigentlichen "Bearbeitungsbereich" erstellst du dann indem du mit Intersect die Schnittmenge zwischen Spaltenbereich und Zeilenbereich bildest

Code:
Public Sub aaa()
Dim raSpalten As Range, raZeilen As Range, raBereich As Range

Set raSpalten = Range("C:C,E:G,J:K,N:N,Q:T,V:W,Z:AA")
Set raZeilen = Range("16:16,30:30,32:32")
Set raBereich = Intersect(raSpalten, raZeilen)
With raBereich.Borders(xlEdgeBottom)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
End With

Set raSpalten = Nothing: Set raZeilen = Nothing: Set raBereich = Nothing
End Sub

Gruß Werner
[-] Folgende(r) 1 Nutzer sagt Danke an Werner.M für diesen Beitrag:
  • sharky51
Top
#7
(05.01.2020, 14:25)sharky51 schrieb: Für eine Tabellenvorlage sollen mehrere … eingefügt werden.

Moin und HimmelHergottSakrament nochoimol!
(sorry, bin kein Bayer)

Eine Vorlage ist eine Vorlage ist eine Vorlage!
Für die hat Excel sogar ein eigenes Dateiformat vorgesehen.

Also:
Erstelle Dir die "richtige" Vorlage mit allen Formeln und Formatierungen
speichere sie als Vorlage (.xltx oder .xltm) ab
und öffne zukünftig eine neue Datei auf Basis dieser Vorlage.

Warum kennen grob 99% der Excel-Anwender diese Variante nicht?
https://support.office.com/de-de/article...8baec39e1e

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#8
(05.01.2020, 20:10)RPP63 schrieb: Warum kennen grob 99% der Excel-Anwender diese Variante nicht?
https://support.office.com/de-de/article...8baec39e1e

Hi Ralf,
Genau das ist das Grundproblem, es fehlen die Grundlagen der Officeanwendungen, denn vergleichbares gilt ja auch in Word. Und Firmen machen heute aus Kostengründen offenbar keine ausreichenden Schulungen mehr oder schicken die Leute zu solchen Seminaren.
Und Learning bei Work ist offenbar auch nicht gefragt, die Hilfefunktionen der Anwendungen werden leider auch kaum genutzt. Onlinetutorials für viele unbekannt.

Motto: es gibt doch Foren, die helfen schon weiter.
Mit freundlichen Grüßen  :)
Michael
Top
#9
Hallo Werner,

super, werde das auch noch testen und dann übernehmen.

Vielen Dank nochmals für Deine Hilfe.
Top
#10
Ja, ist schon schlimm genug, dass ich mir den Link in den Lesezeichen gespeichert habe.
Mindestens einmal pro Woche wird er kopiert.
In der Regel geht es dann ja darum, per VBA die Ausfüll-Zellen der "Vorlage" wieder zu löschen …

Und ja, ich kriege Rücken, Schätzeken, wenn ich dann immer wieder die (durchaus gut gemeinten) Lösungsvorschläge sehe.
(Sorry Werner, ich schätze Dich, aber hier war es eher ein Griff ins Klo …)

Bleibt flauschig!

… und jetzt sehe ich gerade die begeisterte Antwort vom kleinen Hai …

*NoComment*
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste