Benutzer mit den meisten Antworten
SeriesCollection.Errorbars TypMismatch Fehler bei erstellen von Fehlerindikatoren in PowerPoint Charts via VB.net

Frage
-
Hallo,
ich bin neu hier und habe folgendes Problem:
Ich möchte per VB.net in einem PowerPoint Chart Fehlerindikatoren (Errorbars) einfügen. Dazu greife ich in einer PowerPoint Instanz auf das Chart Objekt in der aktiven Präsentation zu. Eine Excelinstanz wird geöffnet, in der die Daten für das Chart hinterlegt sind.
Mit folgender Zeile weise ich einer Datenreihe dann die Errorbar Parameter zu.
MyChart.SeriesCollection(1).ErrorBar(Direction:=Excel.XlErrorBarDirection.xlY, Include:=Excel.XlErrorBarInclude.xlErrorBarIncludeBoth, _ Type:=Excel.XlErrorBarType.xlErrorBarTypeCustom, Amount:=MaxRng, MinusValues:=MinRng)
an dieser Stelle bekomme ich immer einen Typ Mismatch Fehler. 0x80020005 (DISP_E_TYPEMISMATCH)
Ich habe versucht, die Parameter direkt als Long Werte zu übergeben, aber es kommt der gleiche Fehler.
Wenn man das Ganze in VBA direkt in Excel ausführt klappt es einwandfrei.
With ActiveSheet.ChartObjects(1).Chart .SeriesCollection(1).ErrorBar Direction:=dir, Include:=linc, _ Type:=ltyp, Amount:=Range("B9:B11"), _ MinusValues:=Range("B13:B15") end with
Leider finde ich im Objektbrowser keine Information über die genauen Parameter für die Errorbar Methode.
Ich hoffe, das jemand eine Idee hat, wie ich die Errorbars per VB.net in einem Chart anzeigen kann.
Gruß,
Michael
Antworten
-
Hallo,
dann kann man versuchen einen String in der Form "MyShapeName!$A$1:$A$5" in der Methode zu übergeben, d.h. ein String aus gWorkSheet.Name + "!" + myRange.get_Address() zu bilden.
Grüße
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 16. November 2015 09:07
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 20. November 2015 13:28
Alle Antworten
-
Hallo Michael,
die Methode ErrorBar von Series erwartet die Parameter nicht von Microsoft.Office.Interop.Excel sondern von Microsoft.Office.Interop.PowerPoint:
Microsoft.Office.Interop.PowerPoint.XIErrorBarDirection
Microsoft.Office.Interop.PowerPoint.XIErrorBarInclude
-
Hallo,
Danke für die schnelle Antwort. Ich habe das jetzt im Code geändert, aber es tritt immer noch der Fehler auf.
Zum besseren Verständnis habe ich hier mal den Code:
Sub InsertErrorBars(ByVal mySlide As PowerPoint.Slide) Dim myChart As PowerPoint.Chart Dim gChartData As PowerPoint.ChartData Dim gWorkBook As Excel.Workbook Dim gWorkSheet As Excel.Worksheet ' Das Chart "TopDiag" referenzieren und aktivieren myChart = mySlide.Shapes("TopDiag").Chart gChartData = myChart.ChartData gChartData.Activate() ' Es öffnet sich Excel mit den Daten des Charts ' Auf das Excel Workbook / sheet referenzieren gWorkBook = gChartData.Workbook gWorkSheet = gWorkBook.Worksheets(1) With gWorkSheet 'Bereich für die Fehlerindikatoren definieren Dim MaxRng = .Range(.Cells(6, 2), .Cells(8, 2)).Address Dim MinRng = .Range(.Cells(10, 2), .Cells(12, 2)).Address With myChart 'Fehlerindikatoren einfügen .SeriesCollection(1).HasErrorBars = True ' Benutzerdefinierte Werte für Fehlerindikatoren setzen .SeriesCollection(1).ErrorBar(Direction:=PowerPoint.XlErrorBarDirection.xlChartY, Include:=PowerPoint.XlErrorBarInclude.xlErrorBarIncludeBoth, _ Type:=PowerPoint.XlErrorBarType.xlErrorBarTypeCustom, Amount:=MaxRng, MinusValues:=MinRng) Dim ldir As Long = 1 Dim ltyp As Long = -4114 Dim linc As Long = 1 '.SeriesCollection(1).errorbar(0, 1, 0) '(Direction:=ldir, Include:=linc, Type:=ltyp, Amount:=MaxRng, MinusValues:=MinRng) 'Hier ensteht die Fehlermeldung TypMismatch. 'Selbst wenn alle Enums durch gültige Zahlenwerte ersetzt werden wird ein Ausnahmefehler ausgegeben. 'Der gleiche Befehl in VBA direkt in Excel ausgeführt funktioniert einwandfrei. End With End With ' schließen des Excelsheets. Datenänderungen werden in das Chart übernommen. gWorkBook.Close() Marshal.ReleaseComObject(gWorkBook) Marshal.ReleaseComObject(gChartData) Marshal.ReleaseComObject(myChart) End Sub
Gruß,
Michael
-
Hallo,
ich habe jetzt folgendes ausprobiert:
.SeriesCollection(1).ErrorBar(Direction:=PowerPoint.XlErrorBarDirection.xlChartY, Include:=PowerPoint.XlErrorBarInclude.xlErrorBarIncludeBoth, _ Type:=PowerPoint.XlErrorBarType.xlErrorBarTypeCustom, _ Amount:=gWorkSheet.Range(gWorkSheet.Cells(6, 2), gWorkSheet.Cells(8, 2)).Address, _ MinusValues:=gWorkSheet.Range(gWorkSheet.Cells(10, 2), gWorkSheet.Cells(12, 2)).Address)
Damit bekomme ich einen Ausnahmefehler 0x800A03EC
Wenn ich es so versuche:
.SeriesCollection(1).ErrorBar(Direction:=PowerPoint.XlErrorBarDirection.xlChartY, Include:=PowerPoint.XlErrorBarInclude.xlErrorBarIncludeBoth, _ Type:=PowerPoint.XlErrorBarType.xlErrorBarTypeCustom, _ Amount:=gWorkSheet.Range(gWorkSheet.Cells(6, 2), gWorkSheet.Cells(8, 2)), _ MinusValues:=gWorkSheet.Range(gWorkSheet.Cells(10, 2), gWorkSheet.Cells(12, 2)))
bekomme ich weiterhin den TypeMismatch Fehler.
Grüße,
-
Hallo,
dann kann man versuchen einen String in der Form "MyShapeName!$A$1:$A$5" in der Methode zu übergeben, d.h. ein String aus gWorkSheet.Name + "!" + myRange.get_Address() zu bilden.
Grüße
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 16. November 2015 09:07
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 20. November 2015 13:28
-
Hallo,
SUUUPER !!!!!
Es funktioniert jetzt !!! Vielen Dank. Das war die Lösung.
.SeriesCollection(1).ErrorBar(Direction:=PowerPoint.XlErrorBarDirection.xlChartY, Include:=PowerPoint.XlErrorBarInclude.xlErrorBarIncludeBoth, _ Type:=PowerPoint.XlErrorBarType.xlErrorBarTypeCustom, _ Amount:="Tabelle1!B6:B8", _ MinusValues:="Tabelle1!B10:B12")
Auch wenn ich nicht wirklich verstehe, warum ich ein Range Objekt nicht als Parameter übergeben kann (anders als direkt in Excel VBA), ist die Übergabe als String die Lösung.
Danke für Deine Hilfe !
Grüße,
Michael