VBA-Excel Letzte Zeile formatieren

Hallo zusammen,

ich stehe vor folgendem Problem:

In meiner Datei gibt es mehrere Tabellen, die alle nach dem gleichen Muster, bzw. der gleichen Ursprungstabelle aufgebaut sind. Die Tabellen bstehen aus mehreren Spalten, in denen verschiedene Werte, Text und Zahlen eingetragen werden. Spielt aber für die Funktion keine entscheidende Rolle, dient jetzt nur zur Erläuterung. Neben diesen Spalten ist ein Diagramm, welches sich auf die eingetragenen Werte aus den Spalten bezieht.

Nun möchte ich ein Makro machen, welches automatisch die letzte Zeile findet und diese formatiert. Soweit so gut, das habe ich noch geschafft, woran es jetzt scheitert, ist die Verbindung dieses Makros mit einem anderen, welches überflüssige Zeilen ausschneidet und das Diagramm entsprechend neu formatiert.

Hier der Code für das Anpassen des Diagramms und der Seite:

Sub Dia_anpassen()
Rows(„304:“ & Cells(Rows.Count, 2).End(xlUp).Row).Delete
AD = Range(„C5:C5“)
ED = Range(„F5:F5“)
ActiveSheet.ChartObjects(„Diagramm 6“).Activate
ActiveChart.Axes(xlValue).Select
With ActiveChart.Axes(xlValue)
.MinimumScale = AD
.MaximumScale = ED
.MinorUnit = 1
.MajorUnit = 5
.Crosses = xlAutomatic
.ReversePlotOrder = False
.ScaleType = xlLinear
.DisplayUnit = xlNone
End With
Range(„A1:A1“).Select

ActiveSheet.ChartObjects(„Diagramm 6“).Activate
ActiveChart.Axes(xlCategory).Select
Selection.TickLabels.AutoScaleFont = True
With Selection.TickLabels.Font
.Name = „Verdana“
.FontStyle = „Standard“
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
.Background = xlAutomatic
End With
ActiveChart.Axes(xlValue).Select
Selection.TickLabels.AutoScaleFont = True
With Selection.TickLabels.Font
.Name = „Verdana“
.FontStyle = „Standard“
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
.Background = xlAutomatic
End With

End Sub

Das alleine funktioniert wunderbar.

Hier der Code für das Formatieren der letzten Zeile:

Sub Seite_anpassen()
LZ = Cells(Rows.Count, 2).End(xlUp).Row + 1
Rows(„0“ & LZ).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
Selection.Borders(xlEdgeLeft).LineStyle = xlNone
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
End Sub

Das alleine wiederum funktioniert auch. Wenn ich nun jedoch beide zusammenfügen möchte, kommt immer eine Fehlermeldung. Überlegt hätte ich mir schon, dass es mit dem Bildschirmupdate zusammenhängt und hab es deswegen schon so probiert:

Sub Tabelle_anpassen()

Application.ScreenUpdating = False

Call Dia_anpassen
Call Seite_anpassen

Application.ScreenUpdating = True

End Sub

Das blieb jedoch erfolglos. Ich hoffe, ihr könnt mir hierbei helfen :smile:

Vielen Dank schon im Voraus =)

Viele Grüße

Hallo Chris,

ohne Einrückungen ist der Code schlecht zu lesen, benutze den pre-Tag, der wird unterhalb des Eingabefensters erläutert.

Schreibe zuoberst ins Modul:

Option Explicit

Der Editor zwingt dich dann zur Variablendeklaration mit Dim.

Wenn ich nun jedoch
beide zusammenfügen möchte, kommt immer eine Fehlermeldung.

Toll, wie heißt die meldung, in welcher Zeile?
Gehe mal Sub Tabelle_anpassen() Schritt für Schritt mit F8 durch.

Gruß
Reinhard

Hallo Reinhard,

danke für die Antwort!

Der auftretende Fehler ist Folgender:

Laufzeitfehler ‚1004‘
Die Methode ‚Rows‘ für das Objekt ‚_Global‘ ist fehlgeschlagen.

Angezeigt wird mir der Fehler in:

Sub Seite\_anpassen()
**LZ = Cells(Rows.Count, 2).End(xlUp).Row + 1**
 Rows("0" & LZ).Select

Der Vollständigkeit halber noch die Excel-Version: 2002

Nochmal der Code (Ohne Option Explicit):

Sub Tabelle\_anpassen()

Application.ScreenUpdating = False

Call Dia\_anpassen
Call Seite\_anpassen

Application.ScreenUpdating = True

End Sub

Sub Dia\_anpassen()
 Rows("304:" & Cells(Rows.Count, 2).End(xlUp).Row).Delete
 AD = Range("C5:C5")
 ED = Range("F5:F5")
 ActiveSheet.ChartObjects("Diagramm 6").Activate
 ActiveChart.Axes(xlValue).Select
 With ActiveChart.Axes(xlValue)
 .MinimumScale = AD
 .MaximumScale = ED
 .MinorUnit = 1
 .MajorUnit = 5
 .Crosses = xlAutomatic
 .ReversePlotOrder = False
 .ScaleType = xlLinear
 .DisplayUnit = xlNone
 End With
 Range("A1:A1").Select

 ActiveSheet.ChartObjects("Diagramm 6").Activate
 ActiveChart.Axes(xlCategory).Select
 Selection.TickLabels.AutoScaleFont = True
 With Selection.TickLabels.Font
 .Name = "Verdana"
 .FontStyle = "Standard"
 .Size = 10
 .Strikethrough = False
 .Superscript = False
 .Subscript = False
 .OutlineFont = False
 .Shadow = False
 .Underline = xlUnderlineStyleNone
 .ColorIndex = xlAutomatic
 .Background = xlAutomatic
 End With
 ActiveChart.Axes(xlValue).Select
 Selection.TickLabels.AutoScaleFont = True
 With Selection.TickLabels.Font
 .Name = "Verdana"
 .FontStyle = "Standard"
 .Size = 10
 .Strikethrough = False
 .Superscript = False
 .Subscript = False
 .OutlineFont = False
 .Shadow = False
 .Underline = xlUnderlineStyleNone
 .ColorIndex = xlAutomatic
 .Background = xlAutomatic
 End With

End Sub


Sub Seite\_anpassen()
 LZ = Cells(Rows.Count, 2).End(xlUp).Row + 1
 Rows("0" & LZ).Select
 Selection.Borders(xlDiagonalDown).LineStyle = xlNone
 Selection.Borders(xlDiagonalUp).LineStyle = xlNone
 Selection.Borders(xlEdgeLeft).LineStyle = xlNone
 With Selection.Borders(xlEdgeTop)
 .LineStyle = xlContinuous
 .Weight = xlMedium
 .ColorIndex = xlAutomatic
 End With
 Selection.Borders(xlEdgeBottom).LineStyle = xlNone
 Selection.Borders(xlEdgeRight).LineStyle = xlNone
 Selection.Borders(xlInsideVertical).LineStyle = xlNone
End Sub

Setze ich nun Option Explicit ganz oben hin, tritt folgender Fehler beim Ausführen des Makros auf:

Fehler beim Kompilieren:
Variable nicht definiert

an folgender Stelle:

Sub Dia\_anpassen()
 Rows("304:" & Cells(Rows.Count, 2).End(xlUp).Row).Delete
**AD = Range("C5:C5")**

Wobei ich da die Vermutung habe, dass das, wie du sagtest, mit dem Dim zusammenhängt, nur da bin ich mir dann nicht sicher, wie ich die Variablen entsprechend umschreiben kann, damit das mit der Diagrammformatierung auch noch funktioniert. Soweit sind meine VBA Kenntnisse leider noch nicht, aber deswegen bin ich ja hier, um dazuzulernen :wink:

Hallo Chris,

Laufzeitfehler ‚1004‘
Die Methode ‚Rows‘ für das Objekt ‚_Global‘ ist
fehlgeschlagen.

schon mal ein Hinweis.

Angezeigt wird mir der Fehler in:
LZ = Cells(Rows.Count, 2).End(xlUp).Row + 1

Das liegt am Select/Activate. Im Moment wo diese Codezeile durchlaufen wird ist ein Diagramm selektiert.
Das Diagramm hat keine Cells also knallts.
Schreib ans Ende des ersten makros
Range(„A1“).select
dann müßte das mit dem zweiten Makro laufen.

Setze ich nun Option Explicit ganz oben hin, tritt folgender
Fehler beim Ausführen des Makros auf:

Fehler beim Kompilieren:
Variable nicht definiert

Dann wird AD nicht deklariert sein.

nur da bin ich mir dann nicht sicher,
wie ich die Variablen entsprechend umschreiben kann, damit das
mit der Diagrammformatierung auch noch funktioniert.

Warum willst du da Variablen umschreiben, versteh das grad nicht.

Gruß
Reinhard

Hallo Reinhard,

ich werde das morgen, wenn ich wieder im Büro bin gleich mal testen, hier zu Hause habe ich die Datei leider nicht :wink:

Das mit dem Umschreiben ist so gemeint, dass die Variablen, also „AD“ und „ED“ wieder definiert sind. Ich hab das zwar schonmal gelesen, mit „Dim x as Integer“ aber auf dem Gebiet fehlt mir noch die Erfahrung, bzw. das Wissen selbst :wink:

Ich werd mich morgen nach dem Test wieder melden.

Danke schonmal für Deine Hilfe an dieser Stelle

Viele Grüße

Hallo Reinhard,

der Fehler lag tatsächlich an dem „Range(„A1“).Select“ bzw. dessen nicht vorhanden sein :wink:

Habe das jetzt eingebaut und oben mal Option Explicit entfernt und jetzt funktioniert das Makro bzw. die beiden Makros wunderbar :smile:

Danke Dir, jetzt kann ich die Arbeit endlich fertig machen =)

Viele Grüße