Ich bin leider komplett unerfahren mit vba und habe folgendes Problem:
Ich lese eine CSV-Datei ein, was auch wunderbar funktioniert.
Jetzt möchte ich aus den Daten ein Diegramm erstellen.
Dieses funktioniert soweit auch, allerdings enthält das Diagramm noch eine unerwünschte zweite Kurve...
Außerdem wäre es wünschenswert, wenn die im Diagramm angezeigten Werte sich dynamisch mit der Anzahl an Werten in der Tabelle erweiteren.
Hier mein (aus dem Internet zusammengesuchter) Code:
Sub Datei_Importieren()
'Objekte anlegen
Dim sh As Worksheet
Dim chrt As Chart
Dim strFileName As String, arrDaten, arrTmp, lngR As Long, lngLast As Long
Set sh = ActiveWorkbook.Worksheets("Tabelle1")
Set chrt = sh.Shapes.AddChart.Chart
'Trennzeichen
Const cstrDelim As String = ";"
'Dezimalzeichen anpassen
Application.UseSystemSeparators = False
Application.DecimalSeparator = "."
Application.ThousandsSeparator = ","
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
.Title = "Datei wählen"
.InitialFileName = "c:\Messungen\*.csv" 'Pfad anpassen
If .Show = -1 Then
strFileName = .SelectedItems(1)
End If
End With
If strFileName "" Then
Application.ScreenUpdating = False
Open strFileName For Input As #1
arrDaten = Split(Input(LOF(1), 1), vbCrLf)
Close #1
For lngR = 1 To UBound(arrDaten)
arrTmp = Split(arrDaten(lngR), cstrDelim)
If UBound(arrTmp) > -1 Then
With ActiveSheet
lngLast = .Cells(Rows.Count, 1).End(xlUp).Row + 1
lngLast = Application.Max(lngLast, 1)
.Cells(lngLast, 1).Resize(, UBound(arrTmp) + 1) _
= Application.Transpose(Application.Transpose(arrTmp))
End With
End If
Next lngR
End If
'Zellen formatieren
With Range("A:A")
.NumberFormat = "hh:mm:ss.000"
End With
With Range("B:U")
.NumberFormat = "0.00"
End With
'Spaltenbreite
Columns("A:U").WrapText = True
Columns("A:U").ColumnWidth = 20
Columns("A:U").Rows.AutoFit
With chrt
'Kurventyp
.ChartType = xlXYScatterLines
'Daten
With .SeriesCollection.NewSeries
.Name = "=Tabelle1!$T$1"
.XValues = "=Tabelle1!$A$2:$A$10"
.Values = "=Tabelle1!$T$2:$T$10"
End With
'Anzeigeort
.ChartArea.Height = 200
.ChartArea.Width = 700
'Format
.HasTitle = True
.ChartTitle.Characters.Text = "Stromverbrauch"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Zeit[hh:mm:ss,000]"
.Axes(xlCategory).HasMajorGridlines = True
.Axes(xlCategory).TickLabels.NumberFormat = "hh:mm:ss.000"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Strom [A]"
.Axes(xlValue).HasMajorGridlines = True
.HasLegend = True
End With
End Sub