Hallo Leute, ich habe ein kleine Problem und vielleicht könnt ihr mir helfen.
Ich möchte ein Netzdiagramm erstellen, komme aber irgendwie nicht weiter. Ich habe den ChartType für ein Netz gefunden.
https://msdn.microsoft.com/de-de/library/office/ff838409.aspx
Jedoch wird dies nicht angezeigt. Und meine Werte kommen auch nicht rein. Zu guter letzt erscheint zum Schluss die Fehlermeldung: OLE: Automation object error.
Vielleicht könnt ihr mir helfen. Das wäre echt super.
Hier ist mal der Code, mit welchem ich es schaffe, die Excel zu erzeugen, Daten reinzuschreiben und mein"unerwünschtes" Chart erzeugt:
Sub GenerateExcelGraph(data As Variant, anzahl As Integer)
' data ist ein array(1 To 4) und ist für die Excel.
' Anzahl ist die Anzahl der untersuchten Dokumente.
On Error GoTo ErrHandler
' Excel erzeugen
Dim xlApp As Variant
Dim xlSheet As Variant
Dim xlOb As Variant
Set xlApp = CreateObject("Excel.application")
xlApp.Visible = True
xlApp.Workbooks.add
xlApp.ReferenceStyle = 2
Set xlSheet = xlApp.Workbooks(1).Worksheets(1)
xlSheet.Name = "Auswertung"
' Überschrift
xlApp.Rows("1:1").Select
xlApp.Selection.Font.Bold = True
xlApp.Range(xlSheet.Cells(1,1), xlSheet.Cells(1,5)).Select
With xlApp.Selection.Interior
.ColorIndex = 15
.PatternColorIndex = 6
End With
' Überschrift der Spalten.
xlApp.Rows("1:1").Select
xlApp.Selection.Font.Bold = True
xlApp.Range(xlSheet.Cells(4,1), xlSheet.Cells(4,4)).Select
'xlApp.Selection.Font.Bold = True
xlSheet.Range("A1").Value = "Auswertung des ausgewählten Dokuments zur DISG-Befragung"
xlSheet.Range("A2").Value = "Anzahl der ausgewählten Dokumente: " & anzahl
xlSheet.Range("A4").Value = "Dominant"
xlSheet.Range("A5").Value = data(1)
xlSheet.Range("B4").Value = "Initiativ"
xlSheet.Range("B5").Value = data(2)
xlSheet.Range("C4").Value = "Stetig"
xlSheet.Range("C5").Value = data(3)
xlSheet.Range("D4").Value = "Gewissenhaft"
xlSheet.Range("D5").Value = data(4)
'Chart Informationen hinzufügen.
Dim chartObject As Variant
xlApp.Charts.add
Set chartObject = xlApp.Charts("Chart1")
chartObject.chartType = -4151
chartObject.setSourceData(xlSheet.Range(xlSheet.Cells(5,1), xlSheet.Cells(5,4)))
With chartObject
.HasTitle = True
.ChartTitle.Characters.Text = "Testing"
.HasLegend = True
End With
'Referenzen zur Excel schließen
Set xlSheet = Nothing
Set xlApp = Nothing
Exit Sub
ErrHandler:
Print "Fehler " & Str(Err) & " mit der Meldung " & Error$ & " ist bei Zeile " & Str(Erl) & " aufgetreten."
End Sub
Vielen Dank für eure Hilfe
Wenn du die Code-Zeile, die den Fehler verursacht, nicht kennst, dann verwende bitte ein Errorhandling in Notes, das hilft ungemein. Ich Tippe mal auf diese Zeile:
chartObject.setSourceData(xlSheet.Range(""))
Hi, danke für den Tipp.
Ich habe den fehlenden Range oben hinzugefügt. Ich hoffe, dass ist richtig gesetzt. ???
Leider bin ich irgendwie nicht schlauer aus meinem Problem geworden.
Er sagt mir nun, dass in Zeile 56 der Fehler wäre (Siehe Code)
xlSheet.Range("A1").Value = "Auswertung des ausgewählten Dokuments"
Ich habe auch schon die Zeilen verschoben, um sicher zu gehen...
Zudem Öffnet er immernoch ein Balkendiagramm... :'(
Er sagt mir nun, dass in Zeile 56 der Fehler wäre (Siehe Code)
das glaube ich nicht ;) denn in deinem Code ist das die Zeile 56:
xlApp.Selection.Font.Bold = True
und diese liegt vor deiner genannten Zeile (Zeile 59).
Du musst im LS-Editor auf die Funktion klicken die den Fehler erzeugt hat, das zeigt dir dann die richtige Fehlerzeile an.
Hallo,
ich habe mal oben den Code Editiert und den komplett aktuellen eingefügt. So wie er genau bei mir drin ist.
Ich bekomme laut Print folgenden Fehler:
Fehler 213 mit der Meldung OLE: Automation object Error ist bei Zeile 50 aufgetreten
@ronka
Den Range kann auf 2 weege gesetzt werden., wie ist der erste gesetzt ?
Ich habe den Range so gesetzt: chartObject.setSourceData(xlSheet.Range(xlSheet.Cells(5,1), xlSheet.Cells(5,4)))
@jBubbleBoy
Der Fehlercode ist nun bei mir genau in Zeile 50. Hab alles angepasst. Ihr könnt die Sub gerne einfach ausprobieren.
data kann z.b. so aussehen:
data(1) = 30
data(2) = 60
data(3) = 90
data(4) = 120
Sind nur Test Int Werte und anzahl = 1 z.b.
Es wäre genial, wenn ihr mir helfen könnte, das Netz-Diagramm zu erzeugen.
Ich habe mich schon ganz gut (m. M. :-D ) in LS reingearbeitet aber es kommen doch ab und zu harte Probleme ::)
Viele Grüße
Leute, ihr seid die größten!
Da lag der Fehler: xlApp.Charts("Chart1") in xlApp.Charts(1)
Dort hätte ich wahrscheinlich nie geschaut. Vielen Dank an euch alle für die super Hilfe.
Viele Grüße
Ihr wisst nicht zufällig, wie man noch die Achsen beschriftet? In meinem Beispiel schreibt LS 1,2,3,4 ran. Ich möchte aber gerne diese Beschriften und die Achsenlänge festlegen.
Ich habe es schon damit versucht, aber das funktioniert auch nicht:
With chartObject
.HasTitle = True
.ChartTitle.Characters.Text = "DISG - Netzdiagramm"
.HasLegend = True
.Axes(1,1).HasTitle = True
.Axes(1,1).AxisTitle.Characters.Text = "Test"
End With
Zudem habe ich festgestellt, dass LS "xlValue" und Co. nicht kennt. Hier habe ich eine Liste gefunden, welche die Cons Werte angeben.
http://www-10.lotus.com/ldd/nd6forum.nsf/DateAllFlatweb/fd49ba0380299fbc8525798800653fa5
Könnt ihr mir hier helfen, was eventuell falsch ist?
Vielen Dank schon mal
Hallo Peter Klett,
erstmal Danke für den Tipp. Am Anfang hab ich mich über diese Info, sagen wir mal, "gewundert". Aber nach einer kurzen Recherche bezüglich Excel Makros habe ich mein aktuelles Diagramm mithilfe einer Makroaufzeichnung bearbeitet und mir im Anschluss den Code angeschaut.
Danke für den Tipp. Das hat mich gleich mal im LS - VBA - Excel Verständnis weit voran getrieben.
Es funktioniert! Für die Achsenbezeichnung habe ich einfach die genutzte Range verändert. Im Anschluss daran konnte ich durch die kurze Ausgabe von xlValue durch deinen Tipp sehen, dass der Wert 2 ist. Bezüglich des Links mit dem Werten... wissen ist gut, lieber selber noch einmal überprüfen ist besser ::)
Hier der Code von meiner Anpassung:
chartObject.setSourceData(xlSheet.Range(xlSheet.Cells(4,1), xlSheet.Cells(5,4)))
With chartObject
.HasTitle = True
.ChartTitle.Characters.Text = "Netzdiagramm"
.Axes(2).MaximumScale = 140
.Axes(2).MajorUnit = 20
.Axes(2).MinorUnit = 4
.Axes(2).MinimumScale = 0
End With
@jBubbleBoy
Welche Excel-Version hast du denn?
Ich habe Excel 2010.
Viele Grüße
Hallo Leute, könnt ihr mir weiterhelfen?
Wie übersetze ich folgenden VBA Code in LotusScript?
Ich möchte ein Diagramm erstellen und zwar auf eine bestimmte Position. Hier ist der VBA Code aus Excel. LS sagt mir beim "Source:=" einen Fehler... -_-
Range("B9:F9").Select
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlPie
ActiveChart.SetSourceData Source:=Range( _
"'Auswertung der Befragung'!$B$9:$F$9")
Hier ist mein VBA versuch, ein Diagramm zu verschieben. Also ähnlich wie das hier drüber:
ActiveChart.SeriesCollection(1).Select
ActiveChart.SeriesCollection(1).Points(1).Select
ActiveChart.ChartArea.Select
ActiveChart.Location Where:=xlLocationAsObject, Name:= _
"Auswertung der Befragung"
Könnt ihr mir helfen?
Viele Grüße
Vielleicht könnt ihr mir wieder den richtigen Tritt verpassen... ;)
Wie kann ich die Legende bearbeiten (Bezeichnungen hinzufügen)?
VBA wirft folgendes aus:
ActiveChart.SeriesCollection(1).XValues = _
"='Name des Arbeitsblattes'!Z5S2:Z5S6"
Habe mir auch gedacht, dass ich einen Range zurückgeben muss:
Set sc = chartObject.SeriesCollection
sc(1).XValues(xlSheet.Range(xlSheet.Cells(5,2), xlSheet.Cells(5,6)))
Aber das funzt auch nicht.
Ich hoffe, ihr könnt mir da nochmal helfen.
Ist dein "sc" ein Array oder eine Klassenvariable? Versuch das mal:
Set sc = chartObject.SeriesCollection(1)
sc.XValues(xlSheet.Range(xlSheet.Cells(5,2), xlSheet.Cells(5,6)))
Hallo,
leider bekomme ich beim folgenden Code Set sc = chartObject.SeriesCollection(1)
sc.XValues(xlSheet.Range(xlSheet.Cells(5,2), xlSheet.Cells(5,6)))
die Fehlermeldung: Automation object member not found
Nun folgende Fehlermeldung:
Hier mal mein Code für das Diagramm, damit man besser sehen kann, was ich überhaupt machen will, bzw. wie alles aussieht:
Const xlLocationAsObject = 2
Dim chartObject As Variant
xlApp.Charts.add
Set chartObject = xlApp.Charts(1)
chartObject.chartType = xlPie
chartObject.setSourceData(xlSheet.Range(xlSheet.Cells(6 + i, 2), xlSheet.Cells(6 + i ,6)))
chartObject.ApplyLayout(6) ' Kreisdiagramm mit % Anzeige in den jeweiligen Teilen
With chartObject
.HasTitle = True
.ChartTitle.Characters.Text = "Ergebnis"
End With
chartObject.Location xlLocationAsObject, "Arbeitsblatt"
Set sc = chartObject.SeriesCollection(1)
sc.XValues(xlSheet.Range(xlSheet.Cells(5,2), xlSheet.Cells(5,6)))
Wie gesagt, ich möchte gerne noch die Legende einfügen.
Wenn die Spaltenüberschrift über den jeweiligen Werten wäre, dann ist das kein Problem. Jedoch beziehe ich die Werte aus tieferen Zeilen und somit muss ich halt extra im Nachgang die Spaltenüberschrift als Diagrammlegende eintragen.
EDIT:
Ich habe erst einmal eine Zwischenlösung gefunden.
Beim setzen der setSourceData gebe ich dem Range neben den eigentlichen Werten zusätzlich die "Überschriften".
chartObject.setSourceData(xlSheet.Range("'Ergebnis'!$B$5:$F$9:;'Ergebnis'!$B$9:$F$9"))
Trotzdem würde ich gerne die Beschriftung nachträglich ändern können.
Ich hoffe, ihr könnt da helfen.