Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Formatierung von Spalten per VBA ?

Formatierung von Spalten per VBA ?
09.01.2008 14:22:59
Spalten
Hallo Leute,
ich habe ein Problem mit unten aufgeführtem Code. Ich möchte per VBA für mehrere Arbeitsblätter die Spalten- und Zellenformatierung vornehmen. Durch das Makro werden leider die Spalten T bis Z alle als "yyyy-mm-dd" formatiert und nicht so wie ich es mit VBA-Recorder (mit kleinen Anpassungen) aufgezeichnet habe.
Was habe ich falsch gemacht ?

Sub Formatierung()
On Error GoTo ErrExit
Application.ScreenUpdating = False           ' "Bildschirmflackern" vermeiden
'Arbeitsblätter markieren
Sheets(Array( _
"Deckenspiegel", _
"Details", _
"Schnitte", _
"Ansichten", _
"Grundrisse", _
"Fassadendetails", _
"Türdetails", _
"Bodendetails", _
"Wanddetails" _
)).Select
For Each wks In ActiveWindow.SelectedSheets
'Formatierung für Spalte W
Columns("W:W").Select
Range("W2").Activate
With Selection
.HorizontalAlignment = xlCenter
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
End With
'Formatierung für Spalte X
Columns("X:X").Select
Range("X2").Activate
Selection.NumberFormat = "@"
'Formatierung für Spalte Y
Columns("Y:Y").Select
Range("Y2").Activate
Selection.NumberFormat = "yyyy-mm-dd"
'Formatierung für Spalten T:Z
Columns("T:Z").Select
Range("T2").Activate
With Selection
.HorizontalAlignment = xlCenter
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
End With
'Formatierung für Zellenbereich T2:Z2
Range("T2:Z2").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 90
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Next
'Arbeitsblätter markieren
Sheets(Array( _
"Deckenspiegel", _
"Details", _
"Schnitte", _
"Ansichten", _
"Grundrisse", _
"Fassadendetails", _
"Türdetails", _
"Bodendetails", _
"Wanddetails" _
)).Select
'Arbeitsblatt markieren und aktivieren
Sheets("Deckenspiegel").Select
Sheets("Deckenspiegel").Activate
Range("A1").Select
ErrExit:
Application.ScreenUpdating = True   'unbedingt wieder einschalten!
End Sub


Vielen Dank im Voraus.
Liebe Grüße,
Selma

Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Formatierung von Spalten per VBA ?
09.01.2008 17:02:27
Spalten
Hallo Selma,
deinen Quelltext nehme ich mir noch mal vor. Soviel schon mal vorab, das stimmt nicht: Application.ScreenUpdating = True 'unbedingt wieder einschalten! Nach durchlauf des Makros wird ScreenUpdating automatisch wieder auf True gestellt.
Viele Grüße Klaus-Dieter

Online-Excel

Anzeige
AW: Formatierung von Spalten per VBA ?
09.01.2008 18:37:24
Spalten
Hallo Klaus-Dieter,
ich habe Application.ScreenUpdating = True 'unbedingt wieder einschalten! auskommentiert.
Das hat nichts gebracht. Hast du andere Idee ?
Danke !
LG
Selma

AW: Formatierung von Spalten per VBA ?
09.01.2008 20:09:00
Spalten
Hallo Selma,
ich hatte nicht geschrieben, das damit das Problem beseitigt wird. Versuche es mal mit diesem Makro:

Sub Formatierung()
On Error GoTo ErrExit
Application.ScreenUpdating = False           ' Bildschirmaktualisierung aus
Dim wks As Variant
Dim tb As Integer
wks = Array("Deckenspiegel", "Details", "Schnitte", "Ansichten", "Grundrisse", "Fassadendetails" _
, "Türdetails", "Bodendetails", "Wanddetails")
For tb = 1 To 3
With Sheets(wks(tb - 1))
'Formatierung für Spalte W
With Columns("W:W")
.HorizontalAlignment = xlCenter
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
End With
'Formatierung für Spalte X
Range("X:X").NumberFormat = "@"
'Formatierung für Spalte Y
Columns("Y:Y").NumberFormat = "yyyy-mm-dd"
'Formatierung für Spalten T:Z
With Columns("T:Z")
.HorizontalAlignment = xlCenter
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
End With
'Formatierung für Zellenbereich T2:Z2
With Range("T2:Z2")
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 90
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
End With
Next
'Arbeitsblatt markieren und aktivieren
Sheets("Deckenspiegel").Activate
End Sub


Viele Grüße Klaus-Dieter

Online-Excel

Anzeige
Noch was vergessen
09.01.2008 20:11:00
Klaus-Dieter
Hallo Selma,
du musst in der Schleife den Zielwert von 3 auf 9 ändern, sonst werden nicht alle Blätter bearbeitet.
Viele Grüße Klaus-Dieter

Online-Excel

Anzeige
AW: Noch was vergessen
09.01.2008 22:53:51
Selma
Hallo Klaus-Peter,
ich habe es getestet und bei mir läuft das Makro teilweise nur für das aktive Arbeitsblatt.
Anbei die Musterdatei zum Testen: https://www.herber.de/bbs/user/48923.xls
Es kann sein, dass es an verbundenen Zellen innerhalb der Spalten T und Z liegt. Ich würde die gern so wie in der Testdatei beibehalten.
Lg
Selma

Anzeige
AW: Noch was vergessen
09.01.2008 23:04:00
Klaus-Dieter
Hallo Selma,
verbundene Zellen und Überschriften innerhalb einer Liste sind immer von Übel. So etwas sollte man nicht machen. Da funktioniert kein Makro richtig.
Viele Grüße Klaus-Dieter

Online-Excel

Anzeige
AW: Noch was vergessen
09.01.2008 23:18:41
Selma
Hallo Klaus-Dieter,
ich habe in einem Arbeitsblatt alle verbundenen Zellen in Spaltenbereich T:Z normal dargestellt, das Makro funktioniert bei mir nicht.
LG
Selma

AW: Noch was vergessen
10.01.2008 00:42:24
Klaus-Dieter
Hallo Selma,
falls du auf das Datumformat in den Spalten U und V abhebst, die wurden von deinem Makro auch nicht berücksichtigt. Habe das nachgebessert. Ansonsten funktioniert das bei mir einwandfrei.

Sub Formatierung()
'Code von Klaus-Dieter
Application.ScreenUpdating = False           ' Bildschirmaktualisierung aus
Dim wks As Variant
Dim tb As Integer
wks = Array("Deckenspiegel", "Details", "Schnitte", "Ansichten", "Grundrisse", "Fassadendetails" _
_
, "Türdetails", "Bodendetails", "Wanddetails")
For tb = 1 To 9
'Formatierung für Spalte W
With Sheets(wks(tb - 1)).Columns("W:W")
.HorizontalAlignment = xlCenter
.Orientation = 0
.AddIndent = False
'.IndentLevel = 0
.ShrinkToFit = False
'.ReadingOrder = xlContext
End With
'Formatierung für Spalte X
Sheets(wks(tb - 1)).Range("X:X").NumberFormat = "@"
'Formatierung für Spalte Y
Sheets(wks(tb - 1)).Columns("Y:Y").NumberFormat = "yyyy-mm-dd"
'Formatierung für Spalte U und V (zugefügt von Klaus-Dieter)
Sheets(wks(tb - 1)).Columns("U:V").NumberFormat = "yyyy-mm-dd"
'Formatierung für Spalten T:Z
With Sheets(wks(tb - 1)).Columns("T:Z")
.HorizontalAlignment = xlCenter
.Orientation = 0
.AddIndent = False
'.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
End With
'Formatierung für Zellenbereich T2:Z2
With Sheets(wks(tb - 1)).Range("T2:Z2")
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 90
.AddIndent = False
'.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Next tb
'Arbeitsblatt markieren und aktivieren
Sheets("Deckenspiegel").Activate
End Sub


Viele Grüße Klaus-Dieter

Online-Excel

Anzeige
AW: Noch was vergessen
10.01.2008 09:43:00
Selma
Hallo Klaus-Dieter,
vielen Dank, es funktioniert prima.
LG,
Selma

AW: Formatierung von Spalten per VBA ?
09.01.2008 19:35:19
Spalten
Hallo,
ich glaube kaum, dass Screenupdating nach Beendigung einer Sub oder Function automatisch zurückgesetzt wird. Subs können sich auch gegenseitig aufrufen, wenn dann jedesmal die Updatingeinstellung futsch wär, wär das mehr als nervig. Nach Makroende (was immer damit gemeint ist) kann ich mir auch nicht denken.
Auf jeden Fall ist es guter Programmierstil, das ausgeschaltete Updating auch wieder einzuschalten, dann kommen beim Analysieren des Codes auch keine Zweifel auf.
Mit der falschen Formatierung selbst hat das ohnehin nichts zu tun.
Wenn ich das richtig sehe, wird durch das Makro das Zahlenformat gar nicht angefasst. Ich vermute, dass in den betroffenen Spalten auch vorher schon dieses Zahlenformat eingestellt war.
Ich würde daher das Zahlenformat händisch nachschieben oder diesen Part einfach nochmal aufnehmen und hier einfügen.
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Spaltenformatierung in Excel mit VBA


Schritt-für-Schritt-Anleitung

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.

  2. Neues Modul hinzufügen: Klicke im Menü auf Einfügen > Modul, um ein neues Modul zu erstellen.

  3. Code einfügen: Kopiere den folgenden VBA-Code in das Modul:

    Sub Formatierung()
       Application.ScreenUpdating = False
       Dim wks As Variant
       Dim tb As Integer
       wks = Array("Deckenspiegel", "Details", "Schnitte", "Ansichten", "Grundrisse", "Fassadendetails", "Türdetails", "Bodendetails", "Wanddetails")
       For tb = 1 To 9
           With Sheets(wks(tb - 1)).Columns("W:W")
               .HorizontalAlignment = xlCenter
           End With
           Sheets(wks(tb - 1)).Range("X:X").NumberFormat = "@"
           Sheets(wks(tb - 1)).Columns("Y:Y").NumberFormat = "yyyy-mm-dd"
           Sheets(wks(tb - 1)).Columns("U:V").NumberFormat = "yyyy-mm-dd"
           With Sheets(wks(tb - 1)).Columns("T:Z")
               .HorizontalAlignment = xlCenter
           End With
           With Sheets(wks(tb - 1)).Range("T2:Z2")
               .HorizontalAlignment = xlCenter
               .WrapText = True
               .Orientation = 90
           End With
       Next tb
       Sheets("Deckenspiegel").Activate
       Application.ScreenUpdating = True
    End Sub
  4. Makro ausführen: Drücke F5 oder gehe auf Ausführen, um das Makro zu starten.


Häufige Fehler und Lösungen

  • Problem: Spalten werden nicht korrekt formatiert.

    • Lösung: Überprüfe, ob das Makro auf alle gewünschten Arbeitsblätter angewandt wird. Stelle sicher, dass die Schleife die Anzahl der Blätter korrekt berücksichtigt (z.B. For tb = 1 To 9).
  • Problem: Daten in den Spalten erscheinen weiterhin als Datum.

    • Lösung: Wenn die Spalten als "yyyy-mm-dd" formatiert sind, stelle sicher, dass du die Formatierung für Spalten U und V hinzufügst, wie im Beispiel gezeigt.
  • Problem: Verbundene Zellen stören die Formatierung.

    • Lösung: Vermeide die Nutzung von verbundenen Zellen in Bereichen, die du mit VBA bearbeiten möchtest. Dies kann zu unerwarteten Ergebnissen führen.

Alternative Methoden

Falls du VBA nicht verwenden möchtest, kannst du auch die Formatierungsoptionen in Excel direkt nutzen:

  1. Markiere die gewünschten Spalten.
  2. Klicke mit der rechten Maustaste und wähle Zellen formatieren.
  3. Wähle die gewünschte Formatierung (z.B. Text oder Datum).

Diese Methode ist jedoch weniger automatisiert und kann zeitaufwendig sein, besonders bei großen Datenmengen.


Praktische Beispiele

  1. Spalte als Text formatieren: Um eine Spalte als Text zu formatieren, kannst du in deinem VBA-Code die Zeile Range("X:X").NumberFormat = "@" verwenden.

  2. Datum formatieren: Um eine Spalte mit Datumsformat "yyyy-mm-dd" zu formatieren, benutze Columns("Y:Y").NumberFormat = "yyyy-mm-dd".


Tipps für Profis

  • Nutze die With-Anweisung, um den Code übersichtlicher und effizienter zu gestalten, besonders wenn du mehrere Eigenschaften einer Spalte anpassen möchtest.
  • Überlege, ob du das Application.ScreenUpdating = False wirklich für dein gesamtes Makro benötigst. Manchmal ist es besser, dies nur für bestimmte Abschnitte zu verwenden.
  • Speichere deine Arbeitsmappe regelmäßig, um Datenverluste bei Fehlern zu vermeiden.

FAQ: Häufige Fragen

1. Wie kann ich eine Spalte als Text formatieren?
Du kannst die Zeile Selection.NumberFormat = "@" in deinem VBA-Code verwenden, um die Spalte als Text zu formatieren.

2. Warum funktioniert mein Makro nicht auf allen Arbeitsblättern?
Stelle sicher, dass die Schleife die richtige Anzahl an Blättern umfasst und dass die Blattnamen korrekt sind. Überprüfe auch, ob alle Blätter aktiv sind, wenn du das Makro ausführst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige