Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema ScrollBar
BildScreenshot zu ScrollBar ScrollBar-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema SpinButton
BildScreenshot zu SpinButton SpinButton-Seite mit Beispielarbeitsmappe aufrufen

Min-, Max-Werte einer X-Achse anpassen

Betrifft: Min-, Max-Werte einer X-Achse anpassen von: Golem
Geschrieben am: 05.11.2012 19:35:45

Seid gegrüßt, Excel-Fachleute!

Ich benötige schon wieder Eure Hilfe.

Die Min-, Max-Werte der X-Achse eines Diagramms möchte ich dynamisch anpassen.
Dafür verwende ich einen Code, den ich aus dem Internet habe:

Private Sub Worksheet_Change(ByVal Target As Range) 
If Target.Address = "$C$3" Or Target.Address = "$C$4" Then 
Call SetXMinMaxScale 
End If 
End Sub
Sub SetXMinMaxScale()
With ActiveSheet.ChartObjects(1).Chart.Axes(xlCategory)
.MinimumScale = ActiveSheet.Range("C3").Value
.MaximumScale = ActiveSheet.Range("C4").Value
End With
End Sub.

In der Zelle C3 ist der Wert "0".
In der Zelle C4 verändert sich der Wert von 1,6 bis 3,24.

Wenn ich in der Zelle C4 den Wert händisch eingebe, so passt sich der Max-Wert der X-Achse an.
Diese Zelle C4 ist aber mit einer anderen Zelle verknüpft, in der die Werte berechnet werden.
Bei Veränderung dieser Werte wird dann aber der Max-Wert der X-Achse nicht angepasst.

Für evtl. Tipps oder Anregungen schon mal besten Dank!
Golem

  

Betrifft: AW: Min-, Max-Werte einer X-Achse anpassen von: Beverly
Geschrieben am: 05.11.2012 19:53:00

Hi,

eine Formelveränderung löst kein Change-Ereignis aus. Überwache stattdessen die Zellen, aus denen sich die Formel berechnet.


GrußformelBeverly's Excel - Inn


  

Betrifft: AW: Min-, Max-Werte einer X-Achse anpassen von: Golem
Geschrieben am: 05.11.2012 21:05:24

Hallo Karin,

mit meinen geringen VBA-Kenntnissen habe ich meinen Code angepasst ( nur mit Hilfe von Beispielen ).
In meinem ersten Beispiel habe ich die Zelladressen übernommen. Jetzt habe ich im folgenden Bespiel
meine Zelladressen eingesetzt.

Mein geänderter Code:

Private Sub Worksheet_Change(ByVal Target As Range)
   If Not Intersect(Target, Range("AX5")) Is Nothing Then
      With ActiveSheet.ChartObjects(1).Chart
         .Axes(xlCategory).MinimumScale = Range("AW4")
         .Axes(xlCategory).MaximumScale = Range("AW5")
      End With
   End If
End Sub
Sub SetXMinMaxScale()
With ActiveSheet.ChartObjects(1).Chart.Axes(xlCategory)
.MinimumScale = ActiveSheet.Range("AW4").Value
.MaximumScale = ActiveSheet.Range("AW5").Value
End With
End Sub.

Wenn jetzt in der Zelle AX5 ein neuer Wert errechnet wird, so ändert sich der Zellwert AW4.
Aber der Max-Wert der X-Achse wird nicht angepasst.

Erst durch Sub/UserForm ausführen => Ausführen erfolgt eine Anpassung der X-Achse.

Was mache ich falsch?

Noch ein Hinweis!
Ich habe drei Diagramme übereinanderliegen.

Schöne Grüße Golem


  

Betrifft: AW: Min-, Max-Werte einer X-Achse anpassen von: Golem
Geschrieben am: 05.11.2012 21:51:11

Hallo Karin,

noch als Nachtrag der Gesamtcode vom Arbeitsblatt:

Option Explicit

Private Sub ScrollBar1_Change()
 Range("AU21") = ScrollBar1
End Sub

Private Sub ScrollBar2_Change()
 Range("AP9") = ScrollBar2
End Sub

Private Sub Worksheet_Calculate()
 ScrollBar1.Min = IIf(Range("AU15") > 0, Range("AU15"), ScrollBar1.Max)
 ScrollBar1.Max = IIf(Range("AU19") > 0, Range("AU19"), ScrollBar1.Min)
 '
 ScrollBar2.Min = IIf(Range("AJ9") > 0, Range("AJ9"), ScrollBar2.Max)
 ScrollBar2.Max = IIf(Range("AM9") > 0, Range("AM9"), ScrollBar2.Min)
End Sub

Private Sub SpinButton1_Change()

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
   If Not Intersect(Target, Range("AX5")) Is Nothing Then
      With ActiveSheet.ChartObjects(1).Chart
         .Axes(xlCategory).MinimumScale = Range("AW4")
         .Axes(xlCategory).MaximumScale = Range("AW5")
      End With
   End If
End Sub
Sub SetXMinMaxScale()
With ActiveSheet.ChartObjects(1).Chart.Axes(xlCategory)
.MinimumScale = ActiveSheet.Range("AW4").Value
.MaximumScale = ActiveSheet.Range("AW5").Value
End With
End Sub Schöne Grüße Golem


  

Betrifft: AW: Min-, Max-Werte einer X-Achse anpassen von: Beverly
Geschrieben am: 05.11.2012 21:52:46

Hi,

wenn 3 Diagramme übereinader liegen wird vielleicht das falsche angepasst und du siehst das gar nicht? Da müsstest du schon mal deine Mappe hochladen, sonst kann man da nicht nachvollziehen was vor sich geht.


GrußformelBeverly's Excel - Inn


  

Betrifft: AW: Min-, Max-Werte einer X-Achse anpassen von: Golem
Geschrieben am: 06.11.2012 10:03:48

Hallo Karin,

erst einmal einen schönen Dank für Deine Bemühungen.

Die Datei ist ca. 1,3MB groß. Deshalb kann ich sie nicht auf den Server laden ( Begrenzung ca. 300 kB ).
Mit welcher Möglichkeit kann ich diese Datei Dir zur Verfügung stellen?


Schöne Grüße Golem


  

Betrifft: AW: Min-, Max-Werte einer X-Achse anpassen von: Golem
Geschrieben am: 06.11.2012 12:13:45

Hallo Karin,

mir ist eingefallen, dass wohl durch Calculate ein Change-Ereignis ausgelöst werden soll.

Ich habe den Gesamt-Code wie folgt geändert:

Option Explicit

Private Sub ScrollBar1_Change()
 Range("AU21") = ScrollBar1
End Sub

Private Sub ScrollBar2_Change()
 Range("AP9") = ScrollBar2
End Sub

Private Sub SpinButton1_Change()

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
   If Not Intersect(Target, Range("AX5")) Is Nothing Then
      With ActiveSheet.ChartObjects(1).Chart
         .Axes(xlCategory).MinimumScale = Range("AW4")
         .Axes(xlCategory).MaximumScale = Range("AW5")
      End With
   End If
End Sub
Private Sub Worksheet_Calculate()
With ActiveSheet.ChartObjects(1).Chart.Axes(xlCategory)
.MinimumScale = ActiveSheet.Range("AW4").Value
.MaximumScale = ActiveSheet.Range("AW5").Value
End With
End Sub
So funktioniert jetzt die Max-Wert Anpassung einwandfrei.

Einen schönen Dank für Deine Hilfe!
Golem


  

Betrifft: AW: Min-, Max-Werte einer X-Achse anpassen von: Beverly
Geschrieben am: 06.11.2012 14:49:30

Hi,

den Code im Change-Ereignis kannst du weglassen, wenn du das Calculate Ereignis verwendest. Das Calculate Ereignis ist aber ein wenig sinnlos, weil es immer ausgelöst wird, wenn irgendein Formel-Ergebnis berechnet wird, also auch Eingaben in Ausgangszellen für andere Formeln erfolgen und nicht nur in den Ausgangszellen für die Formeln in AW4 und AW5.


GrußformelBeverly's Excel - Inn


  

Betrifft: AW: Min-, Max-Werte einer X-Achse anpassen von: Golem
Geschrieben am: 06.11.2012 16:26:39

Hallo Karin,

Du hast recht damit, dass das Change-Ereignis weggelassen werden kann.

Das ist jetzt die letzte Version des Gesamt-Codes:

Option Explicit

Private Sub ScrollBar1_Change()
 Range("AU21") = ScrollBar1
End Sub

Private Sub ScrollBar2_Change()
 Range("AP9") = ScrollBar2
End Sub

Private Sub SpinButton1_Change()
End Sub

Private Sub Worksheet_Calculate()
    With ActiveSheet.ChartObjects(1).Chart.Axes(xlCategory)
    .MinimumScale = ActiveSheet.Range("AW4").Value
    .MaximumScale = ActiveSheet.Range("AW5").Value
        '
        ScrollBar1.Min = IIf(Range("AU15") > 0, Range("AU15"), ScrollBar1.Max)
        ScrollBar1.Max = IIf(Range("AU19") > 0, Range("AU19"), ScrollBar1.Min)
        '
        ScrollBar2.Min = IIf(Range("AJ9") > 0, Range("AJ9"), ScrollBar2.Max)
        ScrollBar2.Max = IIf(Range("AM9") > 0, Range("AM9"), ScrollBar2.Min)
    End With
End Sub
Alles funktioniert einwandfrei ( auch die Min-, Max-Einstellung der beiden Schieberegler ).

Aufgrund meiner geringen Kenntnisse über VBA, arbeite ich bisher nach der Probiermethode. D.h. wenn etwas funktioniert,
dann bin ich damit erstmal zufrieden, ohne darüber die entsprechenden Kenntnisse zu besitzen.

Dein Einwand mit dem Calculate Ereignis ist nachvollziehbar. Solltest Du einen besseren Vorschlag haben,
so würde ich dies in meinem Gesamt-Code gerne einfügen.
Ich bin jetzt damit überfordert.

Auch würde ich Dir meine Datei zur Verfügung stellen, aber wegen der Größe ist das über den Server
nicht möglich ( welche sonstige Möglichkeit? ).

Schöne Grüße Golem


  

Betrifft: AW: Min-, Max-Werte einer X-Achse anpassen von: Beverly
Geschrieben am: 06.11.2012 20:14:54

Hi,

berechnen sich die Formeln in AW4 bzw. AW5 aus den Zellen AU21 bzw. AP9, also aus den Zellen, in die die beiden Scrollbars Werte eintragen? Sollen die Veränderungen am Diagramm bei Veränderung der Scrollbars vorgenommen werden? Ist letzteres der Fall, dann kannst du den Code durch das Change-Ereignis der Scrollbars aufrufen.


GrußformelBeverly's Excel - Inn


  

Betrifft: AW: Min-, Max-Werte einer X-Achse anpassen von: Golem
Geschrieben am: 06.11.2012 22:00:59

Hallo Karin,

entschuldige die Verwirrung, die ich angerichtet habe.

Die Zellen aus den Change-Ereignissen haben nichts mit Minimum- bzw. MaximumScale zu tun.
Diese werden nur für ScrolBar1 und 2 verwendet. AU21 und AP9 sind die Zellen, die Zeilen-Nr. anzeigen
( z.B. Schieberegler 1 mit dem Verschiebebereich Zeile 17 bis 3517 ).

Ich verwende 1x Calculate, um in den Zellen AW4 und AW5 ( für..Scale ), AU15 und AU19 ( für ..Bar1 ),
AJ9 und AM9 ( für ..Bar2 ) Ereignisse auszulösen. Alle v.g. Zellen sind mit anderen Zellen verknüpft, in denen
Formelwerte errechnet werden. Diese Formelwerte lösen kein Ereignis durch Change aus ( nur händisch ),
sondern diese Formelwerte können nur mit Calculate Ereignisse auslösen ( so habe ich es gelesen ).

So ist die Zelle AW4 mit der Zelle AX4 verknüpft ( Formelzelle ), die Zelle AW5 mit der Zelle AX5 ( Formelzelle ), die Zelle AU15.... usw. .

Ich konnte den Code Calculate noch vereinheitlichen:

Private Sub Worksheet_Calculate()
    With ActiveSheet.ChartObjects(1).Chart.Axes(xlCategory)
    
        .MinimumScale = IIf(Range("AW4") > 0, Range("AW4"), .MinimumScale)
        .MaximumScale = IIf(Range("AW5") > 0, Range("AW5"), .MaximumScale)
        '
        ScrollBar1.Min = IIf(Range("AU15") > 0, Range("AU15"), ScrollBar1.Max)
        ScrollBar1.Max = IIf(Range("AU19") > 0, Range("AU19"), ScrollBar1.Min)
        '
        ScrollBar2.Min = IIf(Range("AJ9") > 0, Range("AJ9"), ScrollBar2.Max)
        ScrollBar2.Max = IIf(Range("AM9") > 0, Range("AM9"), ScrollBar2.Min)
        
    End With
End Sub
Alles funktioniert einwandfrei.

Schöne Grüße Golem


  

Betrifft: AW: Min-, Max-Werte einer X-Achse anpassen von: Beverly
Geschrieben am: 07.11.2012 15:57:15

Hi,

wie ich schon geschrieben hatte: es müssen die Ursprungszellen überwacht werden, aus denen sich die Formelergebnisse berechnen - dann kann man das Change-Ereignis verwenden. Sollte die Skalierung der Achsen durch Veränderung der Scrollbalken erfolgen, dann kann man den Code für das Anpassen der Achsen dem Change-Ereignis der Scrollbalken zuweisen. Es ist in beiden Fällen kein Calculate-Ereignis erforderlich.


GrußformelBeverly's Excel - Inn


  

Betrifft: AW: Min-, Max-Werte einer X-Achse anpassen von: Golem
Geschrieben am: 07.11.2012 20:41:28

Hallo Karin,

jetzt geht mir ein Licht auf!

Ich habe die Zelle, in der die Formel steht, als den Ursprung angesehen. Jetzt habe ich erst verstanden, dass Du die Zellen davor
meinst.

Ich werde den gesamten Code nach Deinen Vorschlag ändern und danach wieder berichten.

Schöne Grüße Golem


  

Betrifft: AW: Min-, Max-Werte einer X-Achse anpassen von: Golem
Geschrieben am: 10.11.2012 19:50:15

Hallo Karin,

nach einigen Versuchen habe ich den Code hinbekommen.

Hier der Code:

Option Explicit

Private Sub SpinButton1_Change()
 Range("U5") = SpinButton1
End Sub

Private Sub SpinButton2_Change()
 Range("I5") = SpinButton2
End Sub
'Ereigniszellen für Min-, Max-Scale
Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Address = "$I$5" Or Target.Address = "$U$5" Then
 Call SetXMinMaxScale
End If
End Sub
'Wertezellen für Min-, Max-Scale

Sub SetXMinMaxScale()
With ActiveSheet.ChartObjects(1).Chart.Axes(xlCategory)
.MinimumScale = ActiveSheet.Range("AW4").Value
.MaximumScale = ActiveSheet.Range("AW5").Value
End With
End Sub

Der Code funktioniert einwandfrei.

Ich überwache die Zellen I5 und U5 der SpinnButtons.



Ich habe noch eine Frage zu meinen Schiebebalken.

So funktioniert der gesamte Code:

Option Explicit
Private Sub SpinButton1_Change()
 Range("U5") = SpinButton1
End Sub

Private Sub SpinButton2_Change()
 Range("I5") = SpinButton2
End Sub
'Ereigniszellen für Min-, Max-Scale
Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Address = "$I$5" Or Target.Address = "$U$5" Then
 Call SetXMinMaxScale
End If
End Sub
'Wertezellen für Min-, Max-Scale

Sub SetXMinMaxScale()
With ActiveSheet.ChartObjects(1).Chart.Axes(xlCategory)
.MinimumScale = ActiveSheet.Range("AW4").Value
.MaximumScale = ActiveSheet.Range("AW5").Value
End With
End Sub
Private Sub ScrollBar1_Change()
 Range("AU21") = ScrollBar1
End Sub

Private Sub ScrollBar2_Change()
 Range("AP9") = ScrollBar2
End Sub

Private Sub Worksheet_Calculate()
 ScrollBar1.Min = IIf(Range("AU15") > 0, Range("AU15"), ScrollBar1.Max)
 ScrollBar1.Max = IIf(Range("AU19") > 0, Range("AU19"), ScrollBar1.Min)
 '
 ScrollBar2.Min = IIf(Range("AJ9") > 0, Range("AJ9"), ScrollBar2.Max)
 ScrollBar2.Max = IIf(Range("AM9") > 0, Range("AM9"), ScrollBar2.Min)
End Sub
Kann auch für beide Schiebebalken Change verwendet werden?

Ich überwache die Zellen AP9 und AU21.

Beispiel:

Option Explicit
Private Sub SpinButton1_Change()
 Range("U5") = SpinButton1
End Sub

Private Sub SpinButton2_Change()
 Range("I5") = SpinButton2
End Sub
'Ereigniszellen für Min-, Max-Scale
Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Address = "$I$5" Or Target.Address = "$U$5" Then
 Call SetXMinMaxScale
End If
End Sub
'Wertezellen für Min-, Max-Scale

Sub SetXMinMaxScale()
With ActiveSheet.ChartObjects(1).Chart.Axes(xlCategory)
.MinimumScale = ActiveSheet.Range("AW4").Value
.MaximumScale = ActiveSheet.Range("AW5").Value
End With
End Sub
Private Sub ScrollBar1_Change()
 Range("AU21") = ScrollBar1
End Sub
'Ereigniszellen für Min-, Max-ScrollBar1
Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Address = "$AU$21" Then
 Call SetMinMax
End If
End Sub
'Wertezellen für Min-, Max-ScrollBar1

Sub SetMinMax()
With ActiveSheet.ChartObjects(1).Chart.Axes(xlCategory)
.Minimum = ActiveSheet.Range("AU15").Value
.Maximum = ActiveSheet.Range("AU19").Value
End With
End Sub
Private Sub ScrollBar2_Change()
 Range("AP9") = ScrollBar2
End Sub
'Ereigniszellen für Min-, Max-ScrollBar2
Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Address = "$AP$9" Then
 Call SetMinMax
End If
End Sub
'Wertezellen für Min-, Max-ScrollBar2

Sub SetMinMax()
With ActiveSheet.ChartObjects(1).Chart.Axes(xlCategory)
.Minimum = ActiveSheet.Range("AJ9").Value
.Maximum = ActiveSheet.Range("AM99").Value
End With
End Sub Aber mit diesen Code gibt es Probleme wegen mehrmals Change.

Für Deine bisherigen Bemühen einen schönen Dank!

Schöne Grüße Golem


  

Betrifft: AW: Min-, Max-Werte einer X-Achse anpassen von: Golem
Geschrieben am: 11.11.2012 20:20:31

Hallo Karin,

nun habe ich es wohl hinbekommen.

Hier mein Code:

Option Explicit

Private Sub SpinButton1_Change()
 Range("U5") = SpinButton1
End Sub

Private Sub SpinButton2_Change()
 Range("I5") = SpinButton2
End Sub

Private Sub ScrollBar1_Change()
 Range("AU21") = ScrollBar1
End Sub

Private Sub ScrollBar2_Change()
 Range("AP9") = ScrollBar2
End Sub
'Ereigniszellen für Min-, Max-Scale und Min-, Max-ScrollBar1 und 2
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$I$5" Or Target.Address = "$U$5" Then
    Call SetXMinMaxScale
ElseIf Target.Address = "$AU$21" Then
    Call SetMinMaxScrollBar1
ElseIf Target.Address = "$AP$9" Then
    Call SetMinMaxScrollBar2
End If
End Sub
'Wertezellen für Min-, Max-Scale

Sub SetXMinMaxScale()
With ActiveSheet.ChartObjects(1).Chart.Axes(xlCategory)
.MinimumScale = ActiveSheet.Range("AW4").Value
.MaximumScale = ActiveSheet.Range("AW5").Value
End With
End Sub

'Wertezellen für Min-, Max-ScrollBar1

Sub SetMinMaxScrollBar1()
ScrollBar1.Min = IIf(Range("AU15") > 0, Range("AU15"), ScrollBar1.Max)
ScrollBar1.Max = IIf(Range("AU19") > 0, Range("AU19"), ScrollBar1.Min)

End Sub

'Wertezellen für Min-, Max-ScrollBar2

Sub SetMinMaxScrollBar2()
ScrollBar2.Min = IIf(Range("AJ9") > 0, Range("AJ9"), ScrollBar2.Max)
ScrollBar2.Max = IIf(Range("AM9") > 0, Range("AM9"), ScrollBar2.Min)

End Sub

Ich habe als den Ursprung jeweils die Change-Ereignisse von SpinButton1 und 2 und ScrollBar1 und 2 verwendet
( Du hattest vehement darauf hingewiesen ).

Dieser Code funktioniert einwandfrei für das dynamische Anpassen der Min-, Max-Werte der X-Achse und
das dynamische Anpassen der Min-, Max-Werte der Schieberegler 1 und 2.

Sicherlich wird der Code noch zu optimieren sein, aber ich freue mich darüber, überhaupt es bis hierhin
geschafft zu haben.

Du hast mir sehr geholfen und dafür einen schönen Dank!

Schöne Grüße Golem


 

Beiträge aus den Excel-Beispielen zum Thema "Min-, Max-Werte einer X-Achse anpassen"