Microsoft Excel

Herbers Excel/VBA-Archiv

Legende formatieren

Betrifft: Legende formatieren von: Markus
Geschrieben am: 28.08.2004 11:08:57

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

  


Betrifft: AW: Legende formatieren von: Christoph M
Geschrieben am: 28.08.2004 12:56:24

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


  


Betrifft: AW: Legende formatieren von: Markus
Geschrieben am: 28.08.2004 13:19:27

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


  


Betrifft: AW: Legende formatieren von: Christoph M
Geschrieben am: 28.08.2004 14:09:11

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

 



  


Betrifft: AW: Legende formatieren von: Markus
Geschrieben am: 28.08.2004 14:38:46

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)


  


Betrifft: AW: Legende formatieren von: Christoph M
Geschrieben am: 28.08.2004 16:24:49

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



  


Betrifft: AW: Legende formatieren von: Markus
Geschrieben am: 28.08.2004 18:09:54

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


  


Betrifft: AW: Legende formatieren von: Christoph M
Geschrieben am: 28.08.2004 18:22:25

was hast du in den Zellen N3, N4, N6 stehen?
lad die Datei (möglichst abgespeckt) doch mal hoch.

Gruß
Christoph


  


Betrifft: AW: Legende formatieren von: Markus
Geschrieben am: 28.08.2004 21:27:46

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


  


Betrifft: Achse-skalieren - Beispiel von: Christoph M
Geschrieben am: 29.08.2004 11:39:44

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


  


Betrifft: AW: Achse-skalieren - Beispiel von: Markus
Geschrieben am: 29.08.2004 12:54:05

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


  


Betrifft: keine weitere Idee von: Christoph M
Geschrieben am: 29.08.2004 13:52:55

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


 

Beiträge aus den Excel-Beispielen zum Thema "Legende formatieren"