Diagramm in Excel mit mehreren Range-Bereichen als Variable

  • Sonstige

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Mitsugali.

    Diagramm in Excel mit mehreren Range-Bereichen als Variable

    Edit by ErfinderDesRades: (Thema verschoben) Bitte richtiges UnterForum wählen!
    Edit by Mitsugali: Das hat doch aber gar nichts mit VBA zu tun ... ist doch VB2010?


    Hallo zusammen,

    ich bin gerade dabei über VB2010 Express ein Diagramm in Excel zu erstellen. Soweit, so gut.
    Allerdings ist der Datenbereich des Diagramms mind. 2 Zellbereiche groß.
    Hier mal als Beispiel, was ich meine:

    Visual Basic-Quellcode

    1. With xlsWorksheet.Shapes.AddChart(XlChartType:=Excel.XlChartType.xlBarClustered, Left:=0, Top:=0, Height:=225, Width:=400)
    2. .Chart.SetSourceData(xlsWorksheet.Range("A2:A5;F2:F5"))
    3. .Chart.PlotBy = Excel.XlRowCol.xlRows
    4. .Chart.Legend.Delete()
    5. End With


    Wenn ich den Bereich fest angebe, ist das auch kein Problem. Nur wenn ich versuche, diesen Bereich durch Variablen zu ersetzen,
    bekomme ich immer untere Fehlermeldung.

    "Der &-Operator ist für die Typen "Microsoft.Office.Interop.Excel.Range" und "Microsoft.Office.Interop.Excel.Range" nicht definiert."


    Ich habe schon so einiges aus dem Internet ausprobiert, aber bisher ging es meist nur um einen einzelnen Zellbereich in Variablen auszudrücken,
    nicht aber um mehrere Bereiche.


    Hier mal der Code, was ich versucht habe, wo dann aber die o.g. Fehlermeldung erscheint:

    Visual Basic-Quellcode

    1. With xlsWorksheet.Shapes.AddChart(XlChartType:=Excel.XlChartType.xlBarClustered, Left:=0, Top:=0, Height:=225, Width:=400)
    2. .Chart.SetSourceData(xlsWorksheet.Range(xlsWorksheet.Cells(2, 1), xlsWorksheet.Cells(Me.DataGridView3.Rows.Count, 1)) & _
    3. xlsWorksheet.Range(xlsWorksheet.Cells(2, Me.DataGridView2.Rows.Count + 1), xlsWorksheet.Cells(Me.DataGridView3.Rows.Count, Me.DataGridView2.Rows.Count + 1)))
    4. .Chart.PlotBy = Excel.XlRowCol.xlColumns
    5. .Chart.Legend.Delete()
    6. End With



    Ich weiß leider nicht genau, wie ich die beiden Zellbereich verbinden kann.
    Ich weiß nicht mehr weiter ... kann mir jemand einen Tipp geben, wie ich hier weiter komme?



    Danke Euch und schonmal nen guten Rutsch ins neue Jahr ;) ;) ;)

    Gruß
    Mitsugali

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Mitsugali“ ()

    Versuche es einmal so:

    Visual Basic-Quellcode

    1. Dim xlsRange1 As Excel.Range
    2. Dim xlsRange2 As Excel.Range
    3. xlsRange1 = CType(xlsBlatt.Cells(Ze1, Sp1), Range) 'Bereich1
    4. xlsRange2 = CType(xlsBlatt.Cells(Ze2, Sp2), Range) 'Bereich2
    5. With xlsWorksheet.Shapes.AddChart(XlChartType:=Excel.XlChartType.xlBarClustered, Left:=0, Top:=0, Height:=225, Width:=400)
    6. .Chart.SetSourceData(xlsWorksheet.Range(xlsRange1, xlsRange2))
    7. .Chart.PlotBy = Excel.XlRowCol.xlRows
    8. .Chart.Legend.Delete()
    9. End With
    ist aber ungetestet...
    Danke zunächst für deinen Versuch.

    Doch leider macht er da draus auch wieder einen gesamten Zellbereich für die Datenquelle. Ich bräuchte halt 2 getrennte Bereiche.
    Ich hänge mal 2 Bilder an, vielleicht habe ich mich oben auch etwas falsch ausgedrückt, worauf ich eigentlich hinaus wollte.

    Bild1: das kommt als Datenbereich heraus, wenn ich den Code von VB1963 passend für mich einsetze

    Bild2: auf solch einen Datenbereich möchte ich gern hinaus


    Hat vielleicht noch jemand einen Ansatz, an dem ich mich versuchen kann?


    Danke Euch
    Bilder
    • Diagrammquelle_1.png

      34,81 kB, 638×326, 369 mal angesehen
    • Diagrammquelle_2.png

      33,99 kB, 638×326, 319 mal angesehen
    Versuche es einmal so:

    Visual Basic-Quellcode

    1. Dim xlsRange1 As Excel.Range
    2. Dim xlsRange2 As Excel.Range
    3. xlsRange1 = Range(xlsBlatt.cells(Ze1, Sp1), xlsBlatt.cells(Ze1, Sp1)) 'Bereich1
    4. xlsRange2 = Range(xlsBlatt.cells(Ze3, Sp3), xlsBlatt.cells(Ze4, Sp4)) 'Bereich2
    Leider nein ... er macht auch hier wieder einen gesamten Zellbereich daraus.

    Ich müsste doch sicherlich versuchen, diese Semikolon zwischen den beiden Zellbereichen mit einfließen zu lassen, oder?
    Dadurch weiß Excel doch dann, dass es sich um 2 Zellbereiche handelt.

    Nur wenn ich das versuche, habe ich ja das Problem, dass ich keinen &-Operator verwenden kann, da VB den bei einem Range-Typ nicht zulässt.

    So in etwa müsste es ja aussehen, aber das geht ja eben nicht ;(

    Visual Basic-Quellcode

    1. .Chart.SetSourceData(xlsWorksheet.Range(xlsRange1 & ";" & xlsRange2))
    Einen hab ich noch...

    Visual Basic-Quellcode

    1. Dim multiRange As Excel.Range
    2. multiRange = Application.Union(Range(Cells(Ze1, Sp1), Cells(Ze2, Sp2)), Range(Cells(Ze3, Sp3), Cells(Ze4, Sp4)))
    3. With xlsWorksheet.Shapes.AddChart(XlChartType:=Excel.XlChartType.xlBarClustered, Left:=0, Top:=0, Height:=225, Width:=400)
    4. .Chart.SetSourceData(xlsWorksheet.Range(multiRange))
    5. .Chart.PlotBy = Excel.XlRowCol.xlRows
    6. .Chart.Legend.Delete()
    7. End With

    vielleicht geht's...
    Zunächst erstmal ein gesundes neues Jahr Euch allen. :thumbsup: :thumbsup: :thumbsup:


    Ich muss dich aber leider enttäuschen ... allerdings bekomme ich jetzt eine andere Fehlermeldung.
    Ich bin schon am suchen, was genau die Meldung bedeutet und wie ich diese abstellen kann, bin bisher aber noch nicht fündig geworden.
    Zumindest finde ich keine Lösung, die auch funktioniert.
    Ich hatte was gefunden, dass man "System.Globalization.CultureInfo auf "en-US" umstellen soll, aber das funktioniert leider nicht.

    Hier mal die Fehlermeldung, die ich jetzt bekomme:

    Ich bin weiter am Suchen, aber vielleicht hat jemand eher einen Ansatz :)

    Achso, die Fehlermeldung bekomme ich bei folgender Codezeile

    Visual Basic-Quellcode

    1. .Chart.SetSourceData(xlsWorksheet.Range(multiRange))
    Bilder
    • Fehlermeldung.png

      33,5 kB, 709×237, 316 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Mitsugali“ ()

    Auch ein gutes neues Jahr :)
    Was steht denn in den Details drinnen?
    Ich habe das ganze jetzt einmal nachgestellt und den Fehler gefunden:
    statt .Chart.SetSourceData(xlsWorksheet.Range(multiRange)) einfach .Chart.SetSourceData(multiRange) schreiben und es funzt!
    Wir haben ein Range im Range aufgerufen und das war der Fehler...
    Wenn'st den Nachstellcode von mir haben willst - stelle ich ihn rein.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VB1963“ ()