Supportnet / Forum / Tabellenkalkulation
Diagramme
Frage
Hallo,
möchte mit VBA über einen Button ein Diagramm erzeugen. Díe Tabelle dazu ist fertig. Das erzeugen klappt soweit, nur leider nimmt VBA die Zeilen und nicht die Spalten.
Denke das es an dem Befehl liegt und kann leider keinen passenden finden.
Antwort 1 von LittleT
Hallo,
wenn du das Erzeugen schon hin bekommen hast, dann wäre es doch nicht schlecht wenn du deinen Quelltext dazu postest, ansonsten müssten wir ja wieder das "Rad neu erfinden". Das liegt ja nicht im sinne des erfinders.
Also poste doch einfach mal wo du probleme mit dem Quelltext hast.
Gruß
LittleT
wenn du das Erzeugen schon hin bekommen hast, dann wäre es doch nicht schlecht wenn du deinen Quelltext dazu postest, ansonsten müssten wir ja wieder das "Rad neu erfinden". Das liegt ja nicht im sinne des erfinders.
Also poste doch einfach mal wo du probleme mit dem Quelltext hast.
Gruß
LittleT
Antwort 2 von Zwockel
Hallo Little T,
das stimmt, dass Rad wollen wir ja nicht neu erfinden!
Also das ist der Quelltext. Zudem wird das Diagramm über einen CommandButton gestartet. (funktioniert!)
Habe jetzt auch schon was mit Column anstatt Transpose probiert, naja klappt noch nicht.
Gruß Zwockel
Quelltext:
Option Explicit
Private Sub UserForm_Activate()
Dim seriesNames(1) As Variant
Dim categories As Variant
Dim values(1) As Variant
Dim objChart As Object, objConstants As Object
Dim t
Dim tx As String
'tx = "OWC10.ChartSpace.10"
If Application.Version = 7 Then
MsgBox "Sie arbeiten mit der Version 95 Diagramm nicht möglich!!!"
ElseIf Application.Version = "8.0" Then
'tx = "OWC8.ChartSpace.8"
MsgBox "Sie arbeiten mit der Version 97 Diagramm nicht möglich!!!"
ElseIf Application.Version = "9.0" Then
tx = "OWC.Chart"
'MsgBox "Sie arbeiten mit der Version 2000"
ElseIf Application.Version = "10.0" Then
tx = "OWC10.ChartSpace.10"
'MsgBox "Sie arbeiten mit der Version XP(2002)"
ElseIf Application.Version = "11.0" Then
tx = "OWC11.ChartSpace.11"
'MsgBox "Sie arbeiten mit der Version 2003"
ElseIf Application.Version > 11 Then
MsgBox "You have Office version " & Application.Version & " installed"
End If
Set t = Me.Controls.Add(tx)
With t
.Left = 6
.Top = 6
.Width = 400
.Height = 310
End With
categories = WorksheetFunction.Transpose(WorksheetFunction.Transpose(Tabelle1.Range("A1:G1")))
values(0) = WorksheetFunction.Transpose(WorksheetFunction.Transpose(Tabelle1.Range("A2:G2")))
values(1) = WorksheetFunction.Transpose(WorksheetFunction.Transpose(Tabelle1.Range("A3:G3")))
seriesNames(0) = "Wochenübersicht 1"
seriesNames(1) = "Wochenübersicht 2"
With t
Set objChart = .Charts.Add
Set objConstants = .Constants
.Charts(0).HasLegend = True
.Charts(0).HasTitle = True
.Charts(0).Title.Caption = "Wochenübersicht"
.Charts(0).Axes(objConstants.chAxisPositionLeft).NumberFormat = "0"
.Charts(0).Axes(objConstants.chAxisPositionLeft).MajorUnit = 1
.Charts(0).SeriesCollection.Add
.Charts(0).SeriesCollection.Add
End With
With objChart
.Type = objConstants.chChartTypeLineMarkers 'ColumnClustered-> Balkendiagramm, LineMarkers->Liniendiagramm
.SeriesCollection(0).SetData objConstants.chDimCategories, objConstants.chDataLiteral, categories
.SeriesCollection(0).SetData objConstants.chDimSeriesNames, objConstants.chDataLiteral, seriesNames(0)
.SeriesCollection(0).SetData objConstants.chDimValues, objConstants.chDataLiteral, values(0)
.SeriesCollection(1).SetData objConstants.chDimSeriesNames, objConstants.chDataLiteral, seriesNames(1)
.SeriesCollection(1).SetData objConstants.chDimValues, objConstants.chDataLiteral, values(1)
End With
End Sub
das stimmt, dass Rad wollen wir ja nicht neu erfinden!
Also das ist der Quelltext. Zudem wird das Diagramm über einen CommandButton gestartet. (funktioniert!)
Habe jetzt auch schon was mit Column anstatt Transpose probiert, naja klappt noch nicht.
Gruß Zwockel
Quelltext:
Option Explicit
Private Sub UserForm_Activate()
Dim seriesNames(1) As Variant
Dim categories As Variant
Dim values(1) As Variant
Dim objChart As Object, objConstants As Object
Dim t
Dim tx As String
'tx = "OWC10.ChartSpace.10"
If Application.Version = 7 Then
MsgBox "Sie arbeiten mit der Version 95 Diagramm nicht möglich!!!"
ElseIf Application.Version = "8.0" Then
'tx = "OWC8.ChartSpace.8"
MsgBox "Sie arbeiten mit der Version 97 Diagramm nicht möglich!!!"
ElseIf Application.Version = "9.0" Then
tx = "OWC.Chart"
'MsgBox "Sie arbeiten mit der Version 2000"
ElseIf Application.Version = "10.0" Then
tx = "OWC10.ChartSpace.10"
'MsgBox "Sie arbeiten mit der Version XP(2002)"
ElseIf Application.Version = "11.0" Then
tx = "OWC11.ChartSpace.11"
'MsgBox "Sie arbeiten mit der Version 2003"
ElseIf Application.Version > 11 Then
MsgBox "You have Office version " & Application.Version & " installed"
End If
Set t = Me.Controls.Add(tx)
With t
.Left = 6
.Top = 6
.Width = 400
.Height = 310
End With
categories = WorksheetFunction.Transpose(WorksheetFunction.Transpose(Tabelle1.Range("A1:G1")))
values(0) = WorksheetFunction.Transpose(WorksheetFunction.Transpose(Tabelle1.Range("A2:G2")))
values(1) = WorksheetFunction.Transpose(WorksheetFunction.Transpose(Tabelle1.Range("A3:G3")))
seriesNames(0) = "Wochenübersicht 1"
seriesNames(1) = "Wochenübersicht 2"
With t
Set objChart = .Charts.Add
Set objConstants = .Constants
.Charts(0).HasLegend = True
.Charts(0).HasTitle = True
.Charts(0).Title.Caption = "Wochenübersicht"
.Charts(0).Axes(objConstants.chAxisPositionLeft).NumberFormat = "0"
.Charts(0).Axes(objConstants.chAxisPositionLeft).MajorUnit = 1
.Charts(0).SeriesCollection.Add
.Charts(0).SeriesCollection.Add
End With
With objChart
.Type = objConstants.chChartTypeLineMarkers 'ColumnClustered-> Balkendiagramm, LineMarkers->Liniendiagramm
.SeriesCollection(0).SetData objConstants.chDimCategories, objConstants.chDataLiteral, categories
.SeriesCollection(0).SetData objConstants.chDimSeriesNames, objConstants.chDataLiteral, seriesNames(0)
.SeriesCollection(0).SetData objConstants.chDimValues, objConstants.chDataLiteral, values(0)
.SeriesCollection(1).SetData objConstants.chDimSeriesNames, objConstants.chDataLiteral, seriesNames(1)
.SeriesCollection(1).SetData objConstants.chDimValues, objConstants.chDataLiteral, values(1)
End With
End Sub
Antwort 3 von Beverly
Hi,
mit der Codezeile
und den folgenden zwei weist du den Datenreihen Werte zu, die in Zeilen angeordnet sind und somit wird das Dia auch zeilenweise erstellt. Im Diagrammblatt oder im eingebetteten Diagrammobjekt legst du die Datenreihenanordnung ja mit PlotByColumns fest, aber ich weiß nicht, ob du im ChartSpace auch mit .SetSourceData arbeiten kannst, weil das ja bei der Zuweisung von Objekten nicht funktioniert.
Ich bin leider kein Mathematiker, aber wenn du eine Matrixfunktion findest, die keine horizontale sondern eine vertikale Matrix abbildet, sollte es eigentlich auch mit der spaltenweise Datenanordnung funktionieren. Die Alternative wäre, die Datenreihen als Reihen: in Zeilen in der Datentabelle anzuordnen.
Bis später,
Karin
mit der Codezeile
WorksheetFunction.Transpose(WorksheetFunction.Transpose(Tabelle1.Range("A1:G1")))
und den folgenden zwei weist du den Datenreihen Werte zu, die in Zeilen angeordnet sind und somit wird das Dia auch zeilenweise erstellt. Im Diagrammblatt oder im eingebetteten Diagrammobjekt legst du die Datenreihenanordnung ja mit PlotByColumns fest, aber ich weiß nicht, ob du im ChartSpace auch mit .SetSourceData arbeiten kannst, weil das ja bei der Zuweisung von Objekten nicht funktioniert.
Ich bin leider kein Mathematiker, aber wenn du eine Matrixfunktion findest, die keine horizontale sondern eine vertikale Matrix abbildet, sollte es eigentlich auch mit der spaltenweise Datenanordnung funktionieren. Die Alternative wäre, die Datenreihen als Reihen: in Zeilen in der Datentabelle anzuordnen.
Bis später,
Karin