Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1252to1256
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Diagramm Achsen skalieren über Zellinhalt
Ralf
Hallo Forum,
ich möchte in einem Tabellenblatt die Skalierung der x- und y-Achse über Zellinhalte verändern.
Ich habe im Internet ein Makro gefunden, und dies versucht an meine Gegebenheiten anzupassen.
Leider funktioniert es nicht wie gewünscht.
Ich habe die Datei einmal hochgeladen:
Außerdem möchte ich in dem Makro verschiedene Formatierungen definieren:
- Schriftart und Schriftgröße x-Achse
- Schriftart und Schriftgröße y-Achse
- Schriftart und Schriftgröße Legende
- Schriftart und Schriftgröße Diagrammtitel
- Datenreihen Füllung Balken Produkt A + Produkt B
- Datenreihen Rahmenart Balken Produkt A + Produkt B
- Datenreihen Rahmenfarbe Balken Produkt A + Produkt B
- Diagrammbereich Füllung
- Diagrammbereich Rahmenart
- Diagrammbereich Rahmenfarbe
Leider funktioniert es nicht wie gewünscht.
Ich habe die datei einmal hochgeladen:
https://www.herber.de/bbs/user/79062.xlsm
Für die Excel Cracks ist der Fehler wahrscheinlich leicht zu finden.
Vielen Dank im Voraus für ein Feedback.
Viele Grüße
Ralf
AW: Diagramm Achsen skalieren über Zellinhalt
25.02.2012 12:07:23
fcs
Hallo Ralf,
2 potentielle Probleme in deinem Makro:
1. Der Name des Diagrammobjekts stimmt ggf. nicht
Hier ist ist es meist sicherer mit der Zählnummer des Objekts zu arbeiten, speziell, wenn nur ein Objekt des Typs vorhanden ist.
2. Die X-Achse (Kategorie-Achse) kann nur in Punkt XY-Diagrammen skaliert werden.
Ein komplettes Diagramm zu formatieren ist ziemlich aufwendig. Außerdem ist es nicht immer ganz einfach, die Objekte im Code korrekt anzusprechen. In der Textdatei findest du ein Beispiel.
Als Farbwerte kannst du entweder den entsprechenden Color-Wert im Code eintragen oder per RGB-Funktion den Wert ermitteln. Die passendne Rot/Grün/Blau-Werte kannst du ermitteln, wenn du eine Zell-Füllfarbe festlegst über "weitere Farben--benutzerdefiniert".
Gruß
Franz
https://www.herber.de/bbs/user/79094.txt
Anzeige
AW: Diagramm Achsen skalieren über Zellinhalt
27.02.2012 06:57:42
Ralf
Hallo Franz,
wow. Ich hätte jetzt nicht damit gerechnet, dass das so kompliziert ist. Mit dem falschen Namen des Diagramms ist mir schon aufgefallen. Das war ein Copy Paste Fehler.
Ich werde Deinen Vorschlag ausprobieren und mich ggf. nochmals melden.
Danke auf jeden Fall für Deinen Support.
Viele Grüße
Ralf
AW: Diagramm Achsen skalieren über Zellinhalt
27.02.2012 10:57:33
Ralf
Hallo Franz,
nach Analyse Deines Codes (ist alles für Nichtwissende, wie ich es bin, sauber beschrieben), sind bei mir nun noch folgende Fragen offen:
Zur Formatierung der Zeichnungsfläche:
With .Line
.Visible = msoTrue
.DashStyle = msoLineSolid
.Weight = 1
.ForeColor.RGB = RGB(0, 0, 0) 'schwarz
End With
Was muss ich ändern, um die Zeichnungsfläche ohne Linie darzustellen? Gut auf weiß stellen und die Linienstärke auf 0 würde gehen, aber mich interessiert der richtige VBA Code.
Ich habe den Makrorekorder bemüht, der zeichnet dies allerdings nicht auf.
Die Zeichnungsfläche soll "ohne Füllung" im Code beschrieben werden.
Ich möchte auf der Y-Achse wahlweise einen Hilfsintervall und einen Hilfsstrichtyp anzeigen lassen, wenn H10 befüllt ist.
.MinorUnit = ActiveSheet.Range("$H$10").Value
Die Skalierung funktioniert schon mal. Nur wenn H10 leer ist, gibt es einen Laufzeitfehler und bei Inhalt "0" passiert gar nix.
Jetzt fehlt mir eine Abfrage, die bei befüllter Zelle H10 die Hilfslinien einblendet, oder wenn H10 leer ist die Hilfslinien ausblendet.
Dann möchte ich das Zahlenformat auf der Y-Achse anpassen:
Bei Werten kleiner als 10 in der Zelle E10 soll dieses Format gelten:
#.##0,00 €;[Rot]-#.##0,00 €
Bei Werten größer oder gleich 10 in der Zelle E10 soll dieses Format gelten:
#.##0 €;[Rot]-#.##0 €
Was muss ich tun, um das Diagramm ohne den Umweg eines "Aktualisierungsbuttons" sofort zu aktualisieren? Es geht mir da speziell um die richtige Skalierung, sowie die Haupt- und Hilfslinien.
Wenn Du mir das noch beantworten könntest, bin ich (glaube ich) halbwegs glücklich.
Vielen Dank im Voraus für eine Antwort.
Viele Grüße
Ralf
Anzeige
AW: Diagramm Achsen skalieren über Zellinhalt
28.02.2012 00:02:58
fcs
Hallo Ralf,
1. Formatierung der Zeichnungsfläche
ohne Linie, ohne Füll-Farbe - die Visible-Eigenschaft der Objekte muss auf msoFalse gesetzt werden
        'Formatierung Zeichnungsfläche
With .PlotArea.Format
With .Fill
.Visible = msoFalse
'            .ForeColor.RGB = RGB(0, 255, 255) ' hellblau
End With
With .Line
.Visible = msoFalse '=  msoTrue
'            .DashStyle = msoLineSolid
'            .Weight = 1.5
'            .ForeColor.RGB = 0 ' Schwarz
End With
End With

Zusätzliche Formatierungen der Y-Achse abhängig von Zellwerten.
        'Formatierung Y-Achse
Call DiagrammFormatAxis(objAxis:=.Axes(xlValue), _
strFontName:="Calibri", dblFontSize:=14)
Set objAxis = .Axes(xlValue)
With objAxis
'Hilfslinien an Achse/in Zeichnungsfläche
If ActiveSheet.Range("H10") > 0 Then
.MinorTickMark = xlTickMarkOutside 'Hilfslinie an Achse
.HasMinorGridlines = True 'Hilfslinien im Zeichnungsbereich einblenden
.MinorUnit = ActiveSheet.Range("H10").Value
With .MinorGridlines
With .Format.Line
.DashStyle = msoLineSolid
.Weight = 1
End With
End With
Else
.MinorTickMark = xlTickMarkNone 'keine Hilfslinie an Achse
.HasMinorGridlines = False 'Hilfslinien im Zeichnungsbereich ausblenden
End If
'Zahlenformat Y-Achse
If ActiveSheet.Range("E10") 

Was muss ich tun, um das Diagramm ohne den Umweg eines "Aktualisierungsbuttons" sofort zu aktualisieren?
Du könntest z.B. die Diagramm-Formatierung automatisch starten wenn bestimmte Zellen geändert werden.
Der nachfolgende Code muß unter dem Tabellenblatt eingefügt werden, in dem die Werte geändert werden.
Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address
Case "$H$10", "$E$10"
Call FormatDiagrammObjects
Case Else
'do nothing
End Select
End Sub

Gruß
Franz
Anzeige
AW: Diagramm Achsen skalieren über Zellinhalt
28.02.2012 07:31:20
Ralf
Hallo Franz,
was soll ich sagen, super selbsterklärender Code. So kann ich selber sehen, wann was passiert und selber noch ein bisschen Feintuning betreiben.
Vielen Dank für Deine Unterstützung.
Viele Grüße
Ralf
AW: Diagramm Achsen skalieren über Zellinhalt
28.02.2012 10:04:33
Ralf
Hallo Franz,
ich habe das Makro in meine Originaldatei eingefügt und versuche dies gerade anzupassen. Funktioniert ganz gut.
Jetzt habe ich aber doch noch weitere Fragen:.
Das Diagramm hat gestapelte Säulen.
1. Wie kann ich nun den "unteren Teil des Balkens" Transparent darstellen, sprich ohne Füllung? Ein weißer Balken würde das Gitternetz überdecken.
2. Wie kann ich abhängig vom Zellbereich B29:M29
- die positiven Werte in RGB (85, 142, 213)
- die negativen Werte in RGB (160, 193, 232
darstellen?
D. h. ich habe Case 1 bis Case 15 im Code FormatDiagrammObjects definiert.
3. Die Datenbeschriftung bei
- positiven Werten in schwarz
- negativen Werten in rot
angezeigt wird?
4. Wie lautet der Code um die primäre Y-Achse anzuzeigen bzw. auszublenden?
Vielen Dank im Voraus für eine Antwort.
Viele Grüße
Ralf
Anzeige
Diagramm-Elemente formatieren per VBA-Anweisungen
29.02.2012 02:35:49
fcs
Hallo Ralf,
nachfolgend Makros für die Formatierungen gemäß deiner Wunschliste.
Bei der Formatierung einzelner Datenpunkte einer Datenreihe abhängig vom Y-Wert muss man nicht unbedingt die Werte in dem zugehörigen Zellbereich prüfen. Man kann die Werte auch direkt über die Values-Eigenschaft der Datenreihe einlesen.
Gruß
Franz
'Erstellt unter Excel 2007
Sub FormatDiagramm_Reihe1_ohneFuellung()
Dim objChart As Chart, objSerie As Series
Set objChart = ActiveSheet.ChartObjects(1).Chart
With objChart
'Formatierung Datenreihen _ Reihe 1 ohne Füllung
Set objSerie = .SeriesCollection(1)
objSerie.Format.Fill.Visible = msoFalse
End With
End Sub
Sub FormatDiagramm_Reihe2_PlusMinus()
Dim objChart As Chart
Set objChart = ActiveSheet.ChartObjects(1).Chart
With objChart
'Punkte der 2. Datenreihe gemäß pos. bzw. neg. Wert formatieren
Call FormatDiagramm_Reihe_Fuell_Farbe(objReihe:=.SeriesCollection(2), _
Farbe_RGB_Plus:=RGB(85, 142, 213), Farbe_RGB_Minus:=RGB(160, 193, 232))
End With
End Sub
Sub FormatDiagramm_Reihe_Fuell_Farbe(objReihe As Series, _
Farbe_RGB_Plus As Long, Farbe_RGB_Minus As Long)
'Für Datenpunkte der Reihe für positive und negative Werte unterschiedliche _
Füllfarben setzen
Dim objPoint As Point, iIndex As Integer
Dim varWerte
varWerte = objReihe.Values
'Basisfarbe der Reihe auf Wert für positive Werte setzen
objReihe.Format.Fill.ForeColor.RGB = Farbe_RGB_Plus
For iIndex = 1 To objReihe.Points.Count
Set objPoint = objReihe.Points(iIndex)
If varWerte(iIndex) 

Anzeige
AW: Diagramm-Elemente formatieren per VBA-Anweisungen
29.02.2012 07:17:21
Ralf
Hallo Franz,
wow, super, super, super.
Ich werde Deinen Code gleich mal einbauen.
Vielen Dank für Deine Unterstützung.
Viele Grüße
Ralf
AW: Diagramm-Elemente formatieren per VBA-Anweisungen
01.03.2012 15:05:26
Ralf
Hallo Franz,
ich habe mich mit der Integration in das große beschäftigt.
Ich stoße nun auf folgendes Problem:
Dein Code funktioniert, so lange ich diesen händisch aufrufe. In Kombination mit einer Abfrage/Bedingung Zelle I10 wahlweise Ja oder Nein, dadurch Zelle I11 0 oder 1, soll nun das Makro ausgeführt werden.
Ich habe die beiden Versionen mal aufgeführt:
Sub FormatDiagrammObjects()
Dim objChart As Chart, objAxis As Axis, iSerie As Integer
Set objChart = ActiveSheet.ChartObjects(1).Chart
With objChart
'Y-Achse ein-/ausblenden
If ActiveSheet.Range("I11") = 0 Then
'primäre Y-Achse ausblenden
.SetElement msoElementPrimaryValueAxisNone
Else
'primäre Y-Achse einblenden
.SetElement msoElementPrimaryValueAxisShow
End If
End Sub

Sub FormatDiagrammObjects()
Dim objChart As Chart, objAxis As Axis, iSerie As Integer
Set objChart = ActiveSheet.ChartObjects(1).Chart
With objChart
'Y-Achse ein-/ausblenden
If ActiveSheet.Range("I11") = 0 Then
'primäre Y-Achse ausblenden
Call Diagramm_Y_Achse_ausblenden
Else
'primäre Y-Achse einblenden
Call Diagramm_Y_Achse_einblenden
End If
End Sub

Leider funktioniert der Code mit der Abfrage in dem langen Code von Dir nicht.
Woran liegt das?
Im Code des Tabellenblatts habe ich natürlich die Zelle I11 mit in die Überwachung eingebunden.
Ich bin derzeit etwas ratlos.
Viele Grüße
Ralf
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige