AW: Excel VBA - Zeitangabe in Balkendiagramm
02.02.2024 19:46:49
Klaus Kurras
Hallo, ich nochmal.
Ich bin am verzweifeln...
Mit Karins Hilfe habe ich per Makrorekorder ein Balkendiagramm erstellen können, das meinen Anforderungen entspricht.
Nun versuche ich per VBA den Bereich für die X und Y Achse variable zu gestalten, was mich bereits einige Nerven gekostet hat.
Per Makro Rekorder werden die Achsen so angegeben:
ActiveChart.FullSeriesCollection(1).Values = "=Zwischenspeicher!R2C1:R22C1"
ActiveChart.FullSeriesCollection(1).XValues = "=Zwischenspeicher!R2C2:R22C2"
Zwischenspeicher ist dabei der Name des Tabellenblattes.
Nun versuche ich mit folgendem Makro die Bereich variabel zu machen:
Sub Diagramm_erstellen()
Dim lastRow As Long
Dim rngValues As Range
Dim rngXValue As Range
Charts.Add2
Charts.Move after:=Sheets(Sheets.Count)
Charts(1).Activate
lastCol = ThisWorkbook.Worksheets("Zwischenspeicher").UsedRange.Columns.Count
With ActiveChart
.SetSourceData Source:=Range("Zwischenspeicher!$J$32")
.ChartType = xlBarClustered
.ChartTitle.Text = "TM Diagramm"
With ThisWorkbook.Worksheets("Zwischenspeicher")
lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
Set rngValues = .Range(.Cells(2, 1), .Cells(lastRow, 1))
Set rngXValues = .Range(.Cells(2, 2), .Cells(lastRow, 2))
MsgBox rngValues.Address(ReferenceStyle:=xlR1C1)
End With
'In dieser Zeile bleibt der Debugger stehen - Laufzeitfehler 1004: Anwendungs- oder objektdefinierter Fehler
.FullSeriesCollection(1).Values = ThisWorkbook.Worksheets("Zwischenspeicher").Range(rngValues.Address(ReferenceStyle:=xlR1C1))
.FullSeriesCollection(1).XValues = ThisWorkbook.Worksheets("Zwischenspeicher").Range(rngXValues.AddressLocal)
' Dieser Bereich ist noch vom Makro Rekorder - bitte ignorieren
End With
With Selection.Format.TextFrame2.TextRange.Characters(1, 13).ParagraphFormat
.TextDirection = msoTextDirectionLeftToRight
.Alignment = msoAlignCenter
End With
With Selection.Format.TextFrame2.TextRange.Characters(1, 13).Font
.BaselineOffset = 0
.Bold = msoFalse
.NameComplexScript = "+mn-cs"
.NameFarEast = "+mn-ea"
.Fill.Visible = msoTrue
.Fill.ForeColor.RGB = RGB(89, 89, 89)
.Fill.Transparency = 0
.Fill.Solid
.Size = 14
.Italic = msoFalse
.Kerning = 12
.Name = "+mn-lt"
.UnderlineStyle = msoNoUnderline
.Spacing = 0
.Strike = msoNoStrike
End With
ActiveChart.ClearToMatchStyle
ActiveChart.ChartStyle = 218
End Sub
In Zeile .FullSeriesCollection(1).Values = ThisWorkbook.Worksheets("Zwischenspeicher").Range(rngValues.Address(ReferenceStyle:=xlR1C1))
bleibt mir der Debugger mit Fehler 1004 stehen.
Ich habe schon verschiedene Syntax versucht...rngValues.AddressLocal
rngValues.Address
und auch
rngValues.Address(ReferenceStyle:=xlR1C1)
Leider ohne Erfolg.
Die MsgBox gibt mir den korrekten Syntax (in dem Falle R2R1:R22R1) aber ich weiß nicht, warum die FullSeriesCollection(1) den Wert nicht nehmen möchte.
Ich stehe auf dem Schlauch, bin langsam Code Blind und brauche euren Input, was eventuell falsch läuft.
Ich danke für eure Zeit und Geduld.
Grüße
Klaus