Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: X-Achse formatieren mit VBA

X-Achse formatieren mit VBA
04.07.2017 16:01:42
Sven
Hallo zusammen,
ich habe eine Excel-Datei mit den Blättern "Daten" und "Diagramm". In den Zellen G7:G9 auf dem Blatt "Daten" habe ich Zeitwerte stehen, die ich zunächst mit einer Formel auf ganze Minuten gerundet habe. Diese drei Werte sollen als Minimum-Grenze, Maximum-Grenze und Hauptintervall der X-Achse des Diagramms auf dem Blatt "Diagramm" eingestellt werden.
Ausgelöst werden soll das Makro am besten, wenn sich der Wert in einer der Zellen G7:G9 ändert.
Nach Internet-Recherche habe ich eine Vorlage gefunden und diese angepasst, allerdings funktioniert der Code nicht:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Worksheets("Daten").Range("G7:G9")) Is Nothing Then Exit Sub
With Worksheets("Diagramm").ChartObjects("Diagramm 4").Chart.Axes(xlValue)
On Error Resume Next
.MinimumScale = Worksheets("Daten").Range("G7").Value
.MaximumScale = Worksheets("Daten").Range("G8").Value
.MajorUnit = Worksheets("Daten").Range("G9").Value
.MinimumScaleIsAuto = (Worksheets("Daten").Range("G7") = "")
.MaximumScaleIsAuto = (Worksheets("Daten").Range("G8") = "")
.MajorUnitIsAuto = (Worksheets("Daten").Range("G9") = "")
End With
End Sub
Kann jemand einem blutigen VBA-Anfänger auf die Sprünge helfen?
VG Sven
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: X-Achse formatieren mit VBA
04.07.2017 16:45:32
Beverly
Hi Sven,
da deine Zellen Formeln enthalten, darfst du nicht die Zellen G7:G9 überwachen, sondern musst dich auf die Zellen beziehen, welche die Formelergebnisse ändern.


AW: X-Achse formatieren mit VBA
05.07.2017 09:08:27
Sven
Moin Karin,
Die manuelle Eingabe des Zeitstempels erfolgt in der Zelle G3. Genauer gesagt kopiere ich den Zeitstempel in diese Zelle. Die Zellen G7 und G8 verarbeiten den dann so, dass das Diagramm immer ein 15 Minuten Fenster abbildet. Der Hauptintervall soll eine Minute sein, also steht in G9 der feste Wert "=1/1440".
Habe also in der zweiten Code-Zeile die Range auf "G3" geändert. Allerdings läuft das immer noch nicht:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Worksheets("Daten").Range("G3")) Is Nothing Then Exit Sub
With Worksheets("Diagramm").ChartObjects("Diagramm 4").Chart.Axes(xlValue)
On Error Resume Next
.MinimumScale = Worksheets("Daten").Range("G7").Value
.MaximumScale = Worksheets("Daten").Range("G8").Value
.MajorUnit = Worksheets("Daten").Range("G9").Value
.MinimumScaleIsAuto = (Worksheets("Daten").Range("G7") = "")
.MaximumScaleIsAuto = (Worksheets("Daten").Range("G8") = "")
.MajorUnitIsAuto = (Worksheets("Daten").Range("G9") = "")
End With
End Sub
Wo liegt/liegen meine Fehler? Danke vorab.
Anzeige
AW: X-Achse formatieren mit VBA
05.07.2017 09:23:49
Beverly
Hi,
und WAS GENAU läuft nicht? Du solltest auch mal On Error Resume Next weglassen, wenn du sehen willst, ob und wo der Code vielleicht hängen bleibt.


AW: X-Achse formatieren mit VBA
05.07.2017 10:09:44
Sven
Läuft nicht = wenn ich in Zelle G3 eine Änderung mache oder einen neuen Wert eingeben, wird die Skalierung der X-Achse angepasst nicht.
Habe weiter im Internet recherchiert und funktionsfähigen Code gefunden und meinen Bedürfnissen angepasst:
Sub x_Achse_skalieren()
ActiveSheet.ChartObjects("Diagramm 4").Activate
ActiveChart.ChartArea.Select
ActiveChart.Axes(xlCategory).Select
With ActiveChart.Axes(xlCategory)
.MaximumScale = Sheets("Daten").Range("G8")
.MinimumScale = Sheets("Daten").Range("G7")
.MinorUnitIsAuto = True
.MajorUnit = (1 / 1440)
.Crosses = xlAutomatic
.ReversePlotOrder = False
.ScaleType = xlLinear
.DisplayUnit = xlNone
End With
ActiveWindow.Visible = False
Range("A1").Select
End Sub
Problem ist, dass das Makro nun manuell ausgeführt werden muss. Ich werde trotzdem nochmal deine Idee ausprobieren.
Anzeige
AW: X-Achse formatieren mit VBA
05.07.2017 10:33:06
Beverly
Du kannst deinen Ursprungscode problemlos verwenden, wenn du die fehlerhafte Zeile findest und eliminierst... ;-)
Den Code aus deinem letzten Beitrag würde ich - so wie er ist - sowieso nicht verwenden, denn in VBA kann man in 99% aller Fälle auf Activate/Select verzichten, außerdem sind einige Attribute Standard und müssen deshalb nicht gesetzt werden. Der Code ist einfach nur mit dem Makrorekorder aufgezeichnet und nicht bereinigt worden...


Anzeige
AW: X-Achse formatieren mit VBA
05.07.2017 11:40:35
Sven
Hi Karin,
der Ursprungscode funktioniert nun. Ich habe - wenn ich das richtig sehe - zwei Fehler gemacht: Ich hatte den Code offenbar ins falsche Fenster eingetragen. Ich habe ihn erst in das Fenster der Arbeitsmappe eingetragen und nun in das Codefenster "Tabelle1 (Daten)". Außerdem war im Ursprungscode die Y-Achse angesprochen worden.
So funktioniert es nun:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Worksheets("Daten").Range("G3")) Is Nothing Then Exit Sub
With Worksheets("Diagramm").ChartObjects("Diagramm 4").Chart.Axes(xlCategory)
On Error Resume Next
.MinimumScale = Worksheets("Daten").Range("G7").Value
.MaximumScale = Worksheets("Daten").Range("G8").Value
.MajorUnit = Worksheets("Daten").Range("G9").Value
.MinimumScaleIsAuto = (Worksheets("Daten").Range("G7") = "")
.MaximumScaleIsAuto = (Worksheets("Daten").Range("G8") = "")
.MajorUnitIsAuto = (Worksheets("Daten").Range("G9") = "")
End With
End Sub
Danke trotzdem für die Hilfe!
Anzeige
AW: X-Achse formatieren mit VBA
05.07.2017 13:58:01
Beverly
Ich würde es ohne On Error lösen, da dies unnötig ist:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("G3")) Is Nothing Then Exit Sub
With Worksheets("Diagramm").ChartObjects("Diagramm 4").Chart.Axes(xlCategory)
If Worksheets("Daten").Range("G7") = "" Then
.MinimumScaleIsAuto = True
Else
.MinimumScale = Worksheets("Daten").Range("G7")
End If
If Worksheets("Daten").Range("G8") = "" Then
.MaximumScaleIsAuto = True
Else
.MaximumScale = Worksheets("Daten").Range("G8")
End If
If Worksheets("Daten").Range("G9") = "" Then
.MajorUnitIsAuto = True
Else
.MajorUnit = Worksheets("Daten").Range("G9")
End If
End With
End Sub


Anzeige
AW: X-Achse formatieren mit VBA
07.07.2017 11:24:29
Sven
Hi nochmal,
wie ändere ich den Code so ab, dass die Änderungen nicht durch eine manuelle Eingabe, sondern durch eine Änderung des Zellenwerts (aus Formel) ausgeführt werden?
Ich habe bisher nur rausgefunden, dass man in diesem Falle das Worksheet_Calculate Ereignis braucht, allerdings funktioniert ein einfaches tauschen in der ersten Zeile nicht.
Anzeige
AW: X-Achse formatieren mit VBA
07.07.2017 13:27:21
Beverly
Hi,
das hatte ich doch bereits in meinem ersten Beitrag geschrieben: überwache die Zellen, die eine Änderung des Formelergebnisses auslösen...


AW: X-Achse formatieren mit VBA
05.07.2017 09:18:58
Sven
Moin Karin,
Die manuelle Eingabe des Zeitstempels erfolgt in der Zelle G3. Genauer gesagt kopiere ich den Zeitstempel in diese Zelle. Die Zellen G7 und G8 verarbeiten den dann so, dass das Diagramm immer ein 15 Minuten Fenster abbildet. Der Hauptintervall soll eine Minute sein, also steht in G9 der feste Wert "=1/1440".
Habe also in der zweiten Code-Zeile die Range auf "G3" geändert. Allerdings läuft das immer noch nicht:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Worksheets("Daten").Range("G3")) Is Nothing Then Exit Sub
With Worksheets("Diagramm").ChartObjects("Diagramm 4").Chart.Axes(xlValue)
On Error Resume Next
.MinimumScale = Worksheets("Daten").Range("G7").Value
.MaximumScale = Worksheets("Daten").Range("G8").Value
.MajorUnit = Worksheets("Daten").Range("G9").Value
.MinimumScaleIsAuto = (Worksheets("Daten").Range("G7") = "")
.MaximumScaleIsAuto = (Worksheets("Daten").Range("G8") = "")
.MajorUnitIsAuto = (Worksheets("Daten").Range("G9") = "")
End With
End Sub
Wo liegt/liegen meine Fehler? Danke vorab.
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

X-Achse formatieren mit VBA


Schritt-für-Schritt-Anleitung

  1. Öffne deine Excel-Datei mit den Blättern "Daten" und "Diagramm".
  2. Füge den folgenden VBA-Code in das Codefenster "Tabelle1 (Daten)" ein:
    Private Sub Worksheet_Change(ByVal Target As Range)
       If Intersect(Target, Worksheets("Daten").Range("G3")) Is Nothing Then Exit Sub
       With Worksheets("Diagramm").ChartObjects("Diagramm 4").Chart.Axes(xlCategory)
           On Error Resume Next
           .MinimumScale = Worksheets("Daten").Range("G7").Value
           .MaximumScale = Worksheets("Daten").Range("G8").Value
           .MajorUnit = Worksheets("Daten").Range("G9").Value
           .MinimumScaleIsAuto = (Worksheets("Daten").Range("G7") = "")
           .MaximumScaleIsAuto = (Worksheets("Daten").Range("G8") = "")
           .MajorUnitIsAuto = (Worksheets("Daten").Range("G9") = "")
       End With
    End Sub
  3. Teste den Code, indem du den Wert in Zelle G3 änderst. Die X-Achse sollte sich nun automatisch anpassen.

Häufige Fehler und Lösungen

  • Code wird nicht ausgeführt: Stelle sicher, dass der Code im richtigen Arbeitsblattfenster eingegeben wurde. Der Code muss in das Codefenster "Tabelle1 (Daten)" eingefügt werden.
  • X-Achse ändert sich nicht: Achte darauf, dass die Zellen G7, G8 und G9 die richtigen Werte enthalten. Wenn diese leer sind, wird die Achse nicht aktualisiert.
  • Fehlermeldungen: Entferne On Error Resume Next während der Fehlersuche, um genau zu sehen, wo der Code eventuell blockiert.

Alternative Methoden

Eine alternative Methode zur Formatierung der Achse in Excel wäre die Verwendung von Pivot-Tabellen oder Diagrammen, die direkt auf die Daten zugreifen. Das ermöglicht eine dynamische Anpassung der Diagrammachsen, ohne dass VBA erforderlich ist. Du kannst auch die Worksheet_Calculate-Ereignisprozedur nutzen, um auf Änderungen in Zellen zu reagieren, die Formelergebnisse ausgeben.

Private Sub Worksheet_Calculate()
    ' Hier kannst du eine ähnliche Logik wie im Worksheet_Change einfügen.
End Sub

Praktische Beispiele

Beispiel 1: Du möchtest die X-Achse eines Diagramms so formatieren, dass sie die Zeitwerte in Zellen G7 (Minimum), G8 (Maximum) und G9 (Hauptintervall) aus einem Zeitstempel in G3 verwendet. Dein Code kann wie folgt aussehen:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Worksheets("Daten").Range("G3")) Is Nothing Then Exit Sub
    With Worksheets("Diagramm").ChartObjects("Diagramm 4").Chart.Axes(xlCategory)
        .MinimumScale = Worksheets("Daten").Range("G7").Value
        .MaximumScale = Worksheets("Daten").Range("G8").Value
        .MajorUnit = Worksheets("Daten").Range("G9").Value
    End With
End Sub

Beispiel 2: Wenn du die Achsenbeschriftung formatieren möchtest, kannst du dies ebenfalls im selben Codeblock tun:

With Worksheets("Diagramm").ChartObjects("Diagramm 4").Chart.Axes(xlCategory)
    .HasTitle = True
    .AxisTitle.Text = "Deine Achsenbeschriftung"
End With

Tipps für Profis

  • Vermeide die Verwendung von Activate und Select, um deinen Code effizienter zu gestalten.
  • Nutze die Funktion Worksheet_Calculate, um auf Änderungen in Formelergebnissen zu reagieren, anstatt nur auf manuelle Eingaben.
  • Halte deinen Code sauber und dokumentiere Änderungen, um die Wartung zu erleichtern.
  • Wenn du die excel achsenoptionen grenzen aus zelle verwenden möchtest, stelle sicher, dass die entsprechenden Zellen stets die gewünschten Werte enthalten.

FAQ: Häufige Fragen

1. Wie kann ich die X-Achse eines Diagramms formatieren?
Du kannst die X-Achse formatieren, indem du den VBA-Code in das entsprechende Arbeitsblatt einfügst und die gewünschten Zellen für Minimum, Maximum und Hauptintervall angibst.

2. Warum wird mein VBA-Code nicht ausgeführt?
Überprüfe, ob der Code im richtigen Arbeitsblattfenster platziert ist und ob die überwachten Zellen tatsächlich geändert werden. Achte auch auf leere Zellen, die die Ausführung verhindern könnten.

3. Kann ich die Diagrammachsen auch ohne VBA anpassen?
Ja, du kannst die Achsenformatierung direkt über die Excel-Oberfläche vornehmen, indem du das Diagramm auswählst und die Achsenoptionen anpasst.

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