Supportnet Computer
Planet of Tech

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

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

Antwort 3 von Beverly

Hi,

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

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: