Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
332to336
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
332to336
332to336
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Diagrammmakro nicht für andere Sheets kompatibel

Diagrammmakro nicht für andere Sheets kompatibel
10.11.2003 14:39:11
golem
Hallo,
ich habe da ein MAkro zur Erzeugung von Diagrammen erstellt(für mehrere Tabellenblätter), es funkt auch alles,bloß als ich das Makro in eine ander MAppe kopiert habe, erscheinen die erstellten Diagramme im anderem Format (Schriftgröße viel zu groß).
Kann das an einer Autoformatierung liegen (das Excel immer die Schrift des vorherigen Diagramms beibehält oder so?)?

der Code:

Sub AddGraphToEachWorksheet2()
Dim ChrtObjts As ChartObjects, ChrtObj As ChartObject
Dim MyChart As Chart, Ws As Worksheet
Dim i%
For i = 1 To 97
For Each Ws In Application.ActiveWorkbook.Worksheets '-- nicht notig
'Set Ws = Worksheets(i)
If Ws.CodeName = "Tabelle" & i Then ' fur die Sheets mit CodeName Tabelle1 bis Tabelle97
' Set MyChart = Charts.Add -- nicht notig
Set ChrtObjts = Ws.ChartObjects
Set ChrtObj = ChrtObjts.Add(0, 0, 100, 100)
Set MyChart = ChrtObj.Chart
With MyChart
' Charts.Add -- nicht nötig
.ChartType = xlColumnClustered
.SetSourceData Source:=Ws.Range("A26,A28:A40,C26,C28:C40,E26,E28:E40"), PlotBy:=xlColumns
.Location Where:=xlLocationAsObject, Name:=Ws.Name
.HasTitle = True
.ChartTitle.Characters.Text = "Sales"
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlValue, xlPrimary).HasTitle = False
.HasLegend = True
.Legend.Select
Selection.Position = xlTop
.HasDataTable = False
.SeriesCollection(2).Select
With Selection.Border
.ColorIndex = 6
.Weight = xlMedium
.LineStyle = xlContinuous
End With
Selection.Shadow = False
Selection.InvertIfNegative = False
Selection.Interior.ColorIndex = xlAutomatic
.SeriesCollection(2).ChartType = xlLine
.SeriesCollection(2).Select
With Selection.Border
.ColorIndex = 6
.Weight = xlThick
.LineStyle = xlContinuous
End With
With Selection
.MarkerBackgroundColorIndex = xlNone
.MarkerForegroundColorIndex = xlNone
.MarkerStyle = xlNone
.Smooth = False
.MarkerSize = 7
.Shadow = False
End With
With .ChartGroups(1)     'Balkendicke
.Overlap = 0
.GapWidth = 500
.HasSeriesLines = False
.VaryByCategories = False
End With
With ChrtObj            'Verschiebung
.Left = 2200
.Top = 295
.Height = 300
.Width = 700
End With
End With
End If
Next '-- nicht nötig
Next i%
End Sub


Außerdem wollte ich fragen wie ich den Bereich ändere, wenn man mehrere Quellen einfügen will (Für was steht das A26(=?),A28:A40 (=?))
das betrifft soweit ich weiß diese Zeile:
.SetSourceData Source:=Ws.Range("A26,A28:A40,C26,C28:C40,E26,E28:E40"), PlotBy:=xlColumns

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Diagrammmakro nicht für andere Sheets kompatibel
10.11.2003 21:56:53
Dan
Hallo Goli,
so hier bin ich wieder :-) mit einem Code, das Dir helfen sollte :-). Und die Antwort auf deine Frage mit dem Range("A26,A28:A40,C26,C28:C40,E26,E28:E40) :
In den VBA Editor screib dies :

Sub Test()
Range("A26,A28:A40,C26,C28:C40,E26,E28:E40").Activate
End Sub

Und drucke dreimal Taste F8. Du wirst den Range sehen :-)

Hier der neue Code, wo du unter anderem sehen kannst wie man den Font Object andern kann. Ich
habe versucht es ganz klar und einfach zu machen :-) D.

================================================================
Option Explicit

Public

Sub AddAndEditChart()
Dim MyChartObjects As ChartObjects
Dim MyChartObject As ChartObject
Dim MyChart As Chart
' MyChartObjects sind alle ChartObjects on Sheet (0 to MyChartObjects.Count)
Set MyChartObjects = ActiveSheet.ChartObjects
' MyChartObject ist der Konteiner fur Charts, es ist die Aussenhulle des Charts
Set MyChartObject = MyChartObjects.Add(Left:=10, Top:=10, Width:=150, Height:=150)
' durch die Variable MyChartObject kann man einige Eigenschafften des Konteiners bearbeiten
With MyChartObject
' Height, Width, Left Pos. und Top Pos. des Konteiners und andere Eigenschafften
.Height = 256
.Width = 321
.Left = 142
.Top = 92
.Name = "MyChartObject"
.Placement = xlFreeFloating
.PrintObject = True
.ProtectChartObject = False
.RoundedCorners = True
.Shadow = True
.Visible = True
' Border des Konteiners
With .Border
.ColorIndex = 3
.LineStyle = msoLineSingle
.Weight = xlThick
End With
' Interior des Konteiners
With .Interior
.ColorIndex = vbGreen
.Pattern = xlPatternSolid
.PatternColor = vbRed
End With
End With
' das alles kann man mit dem Konteiner des Charts machen
' und jetzt mochten wir den Chart selbst bearbeiten
' die Variable MyChart is von Typ chart, wir messen sie nur noch mit Daten fullen,
' oder anders gesagt wir messen die Variable einstellen, damit sie auf ein Object (hier Chart)
' zeigt. Dann konnen wir im Code die Variable benutzem um an den Chart ran zu kommen ...
Set MyChart = MyChartObject.Chart
With MyChart
.SetSourceData Source:=ActiveSheet.Range("C5:D6"), PlotBy:=xlColumns
.ChartType = xlColumnClustered
.Location Where:=xlLocationAsObject, Name:=ActiveSheet.Name
' die Series Collectionen bearbeiten
With .SeriesCollection(1)
.XValues = "=List3!R4C3:R4C4"
.Name = "=""SeriesCollection(1)"""
End With
With .SeriesCollection(2)
.XValues = "=List3!R4C3:R4C4"
.Name = "=""SeriesCollection(2)"""
End With
' Font von Series Collection2
With .Legend.Font
.Bold = True
.Name = "Courier New"
.Size = 10
End With
' den Chart Titel bearbeiten
.HasTitle = True
.ChartTitle.Characters.Text = "ChartTitle"
' die xlCategory-Achse bearbeiten
With .Axes(xlCategory, xlPrimary)
.HasTitle = True
.AxisTitle.Characters.Text = "Axes-xlCategory"
' den Font bearbeiten
With .AxisTitle.Characters.Font
.Bold = True
.Name = "Arial"
.Size = 10
End With
End With ' ende xlCategory Achse
' die xlValue-Achse bearbeiten
With .Axes(xlValue, xlPrimary)
.HasTitle = True
.AxisTitle.Characters.Text = "Axes-xlValue"
' den Font bearbeiten
With .AxisTitle.Characters.Font
.Bold = False
.Name = "Arial"
.Size = 12
End With
End With ' ende xlValue Achse
End With
End Sub

Anzeige
AW: Diagrammmakro nicht für andere Sheets kompatibel
11.11.2003 08:38:53
golem
Guten morgen Dan,
Schön, dass Du am Ball bleibst.

("A26,A28:A40,C26,C28:C40,E26,E28:E40") -> sind die Datenquellen, wenn ich mich nicht irre. Woher weiß man für was(oder welche SeriesCollection) A26... oder C26 steht?
in Deinem Code deklarierst Du die Datenquellen (nachträglich)selber(oder?):
' die Series Collectionen bearbeiten
With .SeriesCollection(1)
.XValues = "=List3!R4C3:R4C4"
.Name = "=""SeriesCollection(1)"""
End With

With .SeriesCollection(2)
.XValues = "=List3!R4C3:R4C4"
.Name = "=""SeriesCollection(2)"""
End With
Sind SeriesCollection die einzelnen Kurven des Diagramms? Sind (1)und (2)dann die Nummerierungen der Kurven(?)

Wiedermal DANKE für Deine Hilfe!

Gruß
Goli
Anzeige
AW: Diagrammmakro nicht für andere Sheets kompatibel
11.11.2003 08:52:58
golem
Muss nochmal stören...hierbei kommt es zur Fehlermeldung(in allen 3Zeilen):
' Interior des Konteiners
With .Interior
.ColorIndex = vbGreen
.Pattern = xlPatternSolid
.PatternColor = vbRed
End With
Die XL-Hilfe:
Farbkonstanten


Die folgenden Konstanten können überall im Code anstelle der tatsächlichen Werte verwendet werden:

Konstante Wert Beschreibung
vbBlack 0x0 Schwarz
vbRed 0xFF Rot
vbGreen 0xFF00 Grün
vbYellow 0xFFFF Gelb
vbBlue 0xFF0000 Blau
vbMagenta 0xFF00FF Magenta
vbCyan 0xFFFF00 Zyan
vbWhite 0xFFFFFF Weiß

mit den Hexwerten klappt es auch nicht(?).
Werde es weiter versuchen und mich dann melden...
Anzeige
AW: Diagrammmakro nicht für andere Sheets kompatibel
11.11.2003 11:50:19
Dan
Hi Golem,
ja wir bleiben am Ball bis wir dem Gegner (excel.chart :-) einen entgultigen Siegestor gegeben haben :-)

-("A26,A28:A40,C26,C28:C40,E26,E28:E40") -> sind die Datenquellen, wenn ich mich nicht irre.
Ja. Im help findet man volgendes daruber :
********************************************
'SetSourceData Method
'
'
'Sets the source data range for the chart.
'
'Syntax
'
'expression.SetSourceData(Source, PlotBy)
'
'expression Required. An expression that returns a Chart object.
'
''''''''''''''''''''''Source Required Range. The range that contains the source data.
'
'PlotBy Optional Variant. Specifies the way the data is to be plotted. Can be either of the following XlRowCol constants: xlColumns or xlRows.
*********************************************************

Also Source ist ein Parameter von Typ Range. Der Source - Range kann dann ein zusammenhangender Range sein (wie z.B "B2 : E3") oder auch ein nicht zusammenhangender Range (wie z.B. "A26,A28:A40,C26,C28:C40,E26,E28:E40").

-Woher weiß man für was(oder welche SeriesCollection) A26... oder C26 steht?
Wenn man sich die Eigenschafft Formula des Objects Series anschaut, dann erfahrt man, dass die Formula z.B. so aussieht :
=SERIES([Workbook1]Sheet1!$B$2,[Workbook1]Sheet1!$C$2:$E$2,[Workbook1]Sheet1!$C$2:$E$2,1)
Und solche Formel hat jeder Series Object. Syntax von SERIES Formel ist so :
SERIES(Name; die Kategogien Beschreibung; Werte; Reihenvolge). Also Daten jeder Serie im Chart sind durch die Formel SERIES bestimmt. Also wenn man es wolte, man konnte die Formel Eigenschafft benutzen um die SERIES Formel und somit die Daten eizustellen.

Option Explicit


Sub Makro1()
Dim MyChart As Chart
Dim MeineReihe As Series
Set MyChart = ActiveSheet.ChartObjects(1).Chart
With MyChart
Set MeineReihe = .SeriesCollection(1)
' man kann es so machen,
'        With MeineReihe
'            .XValues = "=List3!R4C3:R4C4"
'            .Name = "=""SeriesCollection(1)"""
'        End With
' oder man konnte es mit Formula und SERIES einstellen
MeineReihe.Formula = "= SERIES(Tabelle1!A1, Tabelle1!A2:A10, Tabelle1!B2:B10, 1)"
End With
End Sub


- in Deinem Code deklarierst Du die Datenquellen (nachträglich)selber(oder?):
Es ist das selbe wie wenn man den Chart per Hand bilden will. Man muss irgendwelche Daten nennen, die abgebildet werden sollen. Im Code ist es genauso, man muss mit hilfe der Methode SetSourceData(Source, PlotBy) den Source bilden. Es ist nicht nachtraglich, es ist ganz unentbahlich :-). Ohne SourceData gibt es keinen Chart ;-).

-Sind SeriesCollection die einzelnen Kurven des Diagramms? Sind (1)und (2)dann die Nummerierungen der Kurven(?)
Series sind nicht Kurven, sondern eher Linien, Reihen, Folgen, eben Serien :-).

-Muss nochmal stören...hierbei kommt es zur Fehlermeldung(in allen 3Zeilen):
Ja es ist merkwurdig, weil bei mir lauft z.B. die Konstante vbGreen auch nicht. Also wenn es nicht so geht, benutze einfache Integer :
' Interior des Konteiners
With .Interior
.ColorIndex = 10
.Pattern = 1
.PatternColor = 3
End With

Gruss Dich, D.
Anzeige
AW: Diagrammmakro nicht für andere Sheets kompatibel
12.11.2003 08:58:02
golem
Danke für die Hilfe, habe es nun geschafft ohne größere Probs ein Diagramm per VB zu erstellen.
Thx!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige