Anzeige
Archiv - Navigation
476to480
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
476to480
476to480
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Legende formatieren

Legende formatieren
28.08.2004 11:08:57
Markus
Hallo,
ich würde gerne mittels Makro die Legenden von Diagrammen formatieren.
1) Die Skalierung: mit Werten aus anderen Tabellenblättern sollen Minimum, Maximum und das Hauptintervall festgelegt werden
2) Auf die Farben der Legendensymbole hätte ich auch gerne Einfluss per Makro.
Wer kann mir helfen?
Danke,
Markus

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Legende formatieren
28.08.2004 12:56:24
Christoph
Hallo Markus,
das ist der klassische Fall für den Makrorecorder.
zeichne dir die Aktionen auf und schmeiß anschließend alles Überflüssige raus.
Bsp:
Legende mit schwarzem Rahmen und rotem Hintergrund würde mit dem Recorder ungefähr so aussehen:

Sub Makro1()
ActiveSheet.ChartObjects("Diagramm 1").Activate
ActiveChart.ChartArea.Select
ActiveChart.Legend.Select
With Selection.Border
.ColorIndex = 57
.Weight = xlMedium
.LineStyle = xlContinuous
End With
Selection.Shadow = False
With Selection.Interior
.ColorIndex = 3
.PatternColorIndex = 1
.Pattern = xlSolid
End With
'usw...
End Sub

das lässt sich z.B. verkürzen zu:

Option Explicit
Sub Legende()
ActiveSheet.ChartObjects("Diagramm 1").Activate
With ActiveChart.Legend
.Border.ColorIndex = 57
.Border.Weight = xlMedium
.Interior.ColorIndex = 3
End With
End Sub

Gruß
Christoph
Anzeige
AW: Legende formatieren
28.08.2004 13:19:27
Markus
Danke, Christoph!
Das hilft schon ein bißchen weiter, allerdings würde ich gerne bei einer Anweisung wie zum Beispiel
.Border.ColorIndex = 57
die "57" mit einem Wert aus einem anderen Tabellenblatt ersetzen.
Dazu ist es nötig mir diesen Wert als Variable zu definieren, oder?
Wie krieg ich das hin?
Danke,
Markus
AW: Legende formatieren
28.08.2004 14:09:11
Christoph
hallo Markus,
statt "57" im Code zu schreiben kannst du natürlich auch auf eine Variable oder direkt auf den Wert einer Zelle verweisen. (wobei du natürlich nur gültige Werte verwenden kannst)
Bsp:

Option Explicit
Sub Legende()
Dim byCol as Byte
byCol = Sheets("Tabelle2").Range("A1").Value
.Border.ColorIndex = byCol
End Sub
Gruß
Christoph

Anzeige
AW: Legende formatieren
28.08.2004 14:38:46
Markus
Hallo!
Wahrscheinlich bin ich einfach nur zu blöd, aber es funktioniert immer noch nicht ...
Ich kann zwar jetzt die Variable definieren, aber sie wird nicht übernommen, bzw. es kommt zu einer Fehlermeldung von VBA.
Jetzt mal konkret:
Option Explicit

Sub Skalierung()
' Skalierung Makro
' Makro am 28.08.2004 von Markus Geigl aufgezeichnet
Dim min As Byte
min = Sheets("T30 Raster").Range("N4").Value
Dim max As Byte
max = Sheets("T30 Raster").Range("N3").Value
Dim div As Byte
div = Sheets("T30 Raster").Range("N6").Value
ActiveSheet.ChartObjects("Diagramm 1").Activate
ActiveChart.Legend.Select
With ActiveChart.Axes(xlValue)
.MinimumScale = min
.MaximumScale = max
.MinorUnitIsAuto = True
.MajorUnit = div
.Crosses = xlAutomatic
.ReversePlotOrder = False
.ScaleType = xlLinear
.DisplayUnit = xlNone
End With
End Sub

Was ist denn da falsch, ich check's nicht.
Danke!
Markus (verzweifelt)
Anzeige
AW: Legende formatieren
28.08.2004 16:24:49
Christoph
Hallo Markus,
"es kommt zu einer Fehlermeldung" - wo denn? welche Fehlermeldung?
Vermutung, du hast WErte über 255 an die Variablen übergeben.
Dann deklariere diese als Integer.
Noch ein Tipp:
Variablennamen wie "min, max, div, etc" prinzipiell vermeiden. Da Min und Max auch Funktionen sind.
bei mir läuft der folgende Code:
(die nach meiner Einschätzung überflüssigen anweisungen hab ich gestrichen)
Gruß
Christoph

Option Explicit
Sub Skalierung()
Dim intMin As Integer, intMax As Integer, intDiv As Integer
With Sheets("T30 Raster")
intMin = .Range("N4").Value
intMax = .Range("N3").Value
intDiv = .Range("N6").Value
End With
ActiveSheet.ChartObjects("Diagramm 1").Activate
With ActiveChart.Axes(xlValue)
.MinimumScale = intMin
.MaximumScale = intMax
.MajorUnit = intDiv
End With
End Sub

Anzeige
AW: Legende formatieren
28.08.2004 18:09:54
Markus
Hallo!
Funktioniert immer noch nicht! Verdammt!
Folgende Fehlermeldung:
Laufzeitfehler '1004':
Die MinimumScale-Eigenschaft des Axis-Objektes kann nicht festgelegt werden.
Wenn ich dann auf 'Debuggen' klicke, bleibt er bei dieser Zeile stehen:
.MinimumScale = intMin
Vielleicht hast Du noch einen Tipp?
Danke,
Markus
AW: Legende formatieren
28.08.2004 18:22:25
Christoph
was hast du in den Zellen N3, N4, N6 stehen?
lad die Datei (möglichst abgespeckt) doch mal hoch.
Gruß
Christoph
AW: Legende formatieren
28.08.2004 21:27:46
Markus
Hallo,
vielen, vielen Dank für Deine Hilfe! Heute bin ich zu entnervt, mich noch weiter mit der Sache zu beschäftigen. Vielleicht bist Du ja morgen auch wieder hier anzutreffen ...
dann würde ich das Ding mal hochladen, oder schicken ...
Wenn Du weiterhin Lust hast mir zu helfen, könntest Du mir ja mal Deine Emailadresse schicken! Meine hier: mgeigl@sbox.tugraz.at
Bis dann,
Markus
Anzeige
Achse-skalieren - Beispiel
29.08.2004 11:39:44
Christoph
Hallo,
Fragen sollten im Forum gelöst werden. Dann haben auch die Leute, die später im Archiv recherchieren etwas davon.
Hier mal eine Bsp-Datei mit dem zuvor geposteten Code
https://www.herber.de/bbs/user/10261.xls
Gruß
Christoph
AW: Achse-skalieren - Beispiel
29.08.2004 12:54:05
Markus
Hallo,
jetzt wirds wirklich komisch: In Deiner Datei funktionierts, in einer von mir neu angelegten Datei funktionierts auch. Nur in der Datei, auf die es ankommt, funktionierts nicht.
Ich lade meine Datei jetzt einfach mal hochladen, vielleicht kann mir dann jemand helfen:
https://www.herber.de/bbs/user/10262.xls
Hier mein Problem:
Im Tabellenblatt "Diagramme" sollte die Legende für jedes Diagramm formatiert werden. Zur automatischen Skalierung berechne ich je eine untere und eine obere Grenze, außerdem das jeweilige Hauptintervall (Es sollen immer genau 4 verschiedene Wertebereiche geben).
Beim folgenden Makro kommt es zu einem Laufzeitfehler ...
Option Explicit

Sub Scaling()
Dim intMin As Integer, intMax As Integer, intDiv As Integer
With Sheets("T30 Raster")
intMin = .Range("N4").Value
intMax = .Range("N3").Value
intDiv = .Range("N6").Value
End With
Sheets("Diagramme").Select
ActiveSheet.ChartObjects("Diagramm 7").Activate
ActiveChart.Legend.Select
With ActiveChart.Axes(xlValue)
.MinimumScale = intMin
.MaximumScale = intMax
.MinorUnitIsAuto = True
.MajorUnit = intDiv
.Crosses = xlAutomatic
.ReversePlotOrder = False
.ScaleType = xlLinear
.DisplayUnit = xlNone
End With
End Sub

Was geht hier schief?
Danke,
Markus
Anzeige
keine weitere Idee
29.08.2004 13:52:55
Christoph
Sorry,
ich schätze, dass das an dem Diagramm-Typ liegt. Offenbar läuft die Scalierung bei Oberflächen-Diagrammen über die Legende. (hab noch keine Erfahrung mit diesem Typ)
Mutmaßung:
Hierbei bleibt dann selbst ein aufgezeichnetes Makro an der Zeile ".MinimumScale, usw." hängen, weil ".MinimumScale, usw." nur für Achsen gilt, hier aber die Scalierung über die Legende stattfindet.
Wenn das so ist wie vermutet, dann ist das wohl ein Bug
Gruß
Christoph

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige