Hallo,
ich bin neu in der VBA Programmierung und möchte mit Makros Daten auswerten welche per Labview in ein Excel File geschrieben werden. Diese Excel Files sehen dann immer gleich aus, haben jedoch unterschiedliche Zeilenlängen da die Tests nie gleich lang dauern. Um die Daten nun in ein Diagramm zu plotten habe ich mir aus verschiedenen Anleitungen Online einen Code zusammengebaut welcher zunächst ermittelt wie viele Zeilen vorliegen, diese Information in eine Variable speichert und anschließend das Diagramm über den Zeilenbereich füllt. Dies sieht wie folgt aus:
Spoiler anzeigen
Besonders Problematisch scheint dabei folgender Teil zu sein:
Sobald ich den Code laufen lasse erhalte ich einen "Laufzeitfehler 1004: Anwendungs- oder objektdefinierter Fehler". Dabei ist es egal ob ich mit oder ohne with arbeite. Wenn ich ohne .SeriesCollection(1) vor den .Values arbeite ist dies wohl nicht korrekt und wird von VBA beim Kompilieren mit einem Fehler gewürdigt. Ebenso wird mir im Debugger angezeigt das die Variable k korrekte Werte beinhaltet. Desweiteren macht es keinen unterschied ob die die Sheets direkt anspreche oder per Name.
Ich bin mir nicht sicher ob mein Code optimal geschrieben ist, jedoch erschien mir dies als die "logischste" Lösung um mehrere Datenreihen passend einzubinden.
Anzumerken ist wahrscheinlich auch noch das im Tabellenblatt bei jedem ausführen ein Diagramm erzeugt wird, dieses aber wie im Anhang dargestellt aussieht.
Eine zusätzliche Ergänzung noch:
Ich habe auch einen alternativen Weg getestet über
jedoch wird auch hier ein entsprechender Laufzeitfehler 1004 angezeigt.
Mit besten Grüßen,
Trayo
ich bin neu in der VBA Programmierung und möchte mit Makros Daten auswerten welche per Labview in ein Excel File geschrieben werden. Diese Excel Files sehen dann immer gleich aus, haben jedoch unterschiedliche Zeilenlängen da die Tests nie gleich lang dauern. Um die Daten nun in ein Diagramm zu plotten habe ich mir aus verschiedenen Anleitungen Online einen Code zusammengebaut welcher zunächst ermittelt wie viele Zeilen vorliegen, diese Information in eine Variable speichert und anschließend das Diagramm über den Zeilenbereich füllt. Dies sieht wie folgt aus:
Visual Basic-Quellcode
- Sub EingebundenerGraph()
- Dim sh As Worksheet
- Set sh = ThisWorkbook.Sheets(6)
- Dim k As Long
- Dim k2 As Long
- k = sh.Range("A1048576").End(xlUp).Row
- k2 = k - 1
- 'Dieser Teil zählt die Zellenzahl von unten nach oben und berücksichtigt das die erste Zelle nur eine Überschrift ist
- Dim Diagramm1 As Chart
- Dim SeriesName1 As String
- Dim SeriesName2 As String
- Dim SeriesName3 As String
- Set Diagramm1 = Tabelle8.Shapes.AddChart.Chart
- With Diagramm1
- .ChartType = xlLine
- .SeriesCollection.NewSeries 'Schub
- .SeriesCollection(1).XValues = Sheets(6).Range(Cells(2, 1), Cells(k, 1)) 'x-Werte
- .SeriesCollection(1).Values = Sheets(6).Range(Cells(2, 3), Cells(k, 3)) 'y-Werte
- SeriesName1 = Sheets(6).Cells(1, 3)
- .SeriesCollection(1).Name = SeriesName1
- .SeriesCollection.NewSeries 'Ethanol Fluss
- .SeriesCollection(2).XValues = Sheets(6).Range(Cells(2, 1), Cells(k, 1)) 'x-Werte
- .SeriesCollection(2).Values = Sheets(4).Range(Cells(2, 3), Cells(k, 3)) 'y-Werte
- SeriesName2 = Sheets(4).Cells(1, 3)
- .SeriesCollection(2).Name = SeriesName2
- .SeriesCollection.NewSeries 'LOX Fluss
- .SeriesCollection(3).XValues = Sheets(6).Range(Cells(2, 1), Cells(k, 1)) 'x-Werte
- .SeriesCollection(3).Values = Sheets(3).Range(Cells(2, 4), Cells(k, 4)) 'y-Werte
- SeriesName3 = Sheets(4).Cells(1, 4)
- .SeriesCollection(3).Name = SeriesName3
- End With
- End Sub
Besonders Problematisch scheint dabei folgender Teil zu sein:
Visual Basic-Quellcode
Sobald ich den Code laufen lasse erhalte ich einen "Laufzeitfehler 1004: Anwendungs- oder objektdefinierter Fehler". Dabei ist es egal ob ich mit oder ohne with arbeite. Wenn ich ohne .SeriesCollection(1) vor den .Values arbeite ist dies wohl nicht korrekt und wird von VBA beim Kompilieren mit einem Fehler gewürdigt. Ebenso wird mir im Debugger angezeigt das die Variable k korrekte Werte beinhaltet. Desweiteren macht es keinen unterschied ob die die Sheets direkt anspreche oder per Name.
Ich bin mir nicht sicher ob mein Code optimal geschrieben ist, jedoch erschien mir dies als die "logischste" Lösung um mehrere Datenreihen passend einzubinden.
Anzumerken ist wahrscheinlich auch noch das im Tabellenblatt bei jedem ausführen ein Diagramm erzeugt wird, dieses aber wie im Anhang dargestellt aussieht.
Eine zusätzliche Ergänzung noch:
Ich habe auch einen alternativen Weg getestet über
jedoch wird auch hier ein entsprechender Laufzeitfehler 1004 angezeigt.
Mit besten Grüßen,
Trayo