Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1348to1352
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Diagramm enthält eine Reihe(Kurve) zu viel

Diagramm enthält eine Reihe(Kurve) zu viel
26.02.2014 11:01:16
Olli
Hallo Helfende!
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

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Diagramm enthält eine Reihe(Kurve) zu viel
26.02.2014 12:11:47
Beverly
Hi Olli,
erstelle das Diagramm nicht jedas mal neu per VBA sondern einmal von Hand, denn wenn du den Wertebereich dynamisch machst, ist das nicht mehr nötig. Wie man ein dynamisches Diagramm erstellt, dazu schau dir das Beispiel Dynamisches Diagramm1 auf meiner HP, Seite Diagramme an.


Anzeige
AW: Diagramm enthält eine Reihe(Kurve) zu viel
26.02.2014 13:24:09
Olli
Hey Beverly, danke für die schnelle Antwort!
Konnte das Problem mit der zweiten Datenreihe durch das preventive Löschen in den Griff bekommen:
chrt.SeriesCollection(1).Delete
With .SeriesCollection.NewSeries
.Name = "=Tabelle1!$T$1"
.XValues = "=Tabelle1!$A$2:$A$10"
.Values = "=Tabelle1!$T$2:$T$10"
End With
Du könntest mir allerdings noch einmal verraten, wie ich dein Beispiel in Ecxel 2010 importiere.
Ist bestimmt ganz einfach und ich habe Grund mich zu schämen^^

AW: Diagramm enthält eine Reihe(Kurve) zu viel
26.02.2014 13:46:57
Beverly
Hi Olli,
was gibt es an dem Beispiel denn zum "importieren"? Das funktioniert doch in allen Excelversionen


Anzeige
AW: Diagramm enthält eine Reihe(Kurve) zu viel
26.02.2014 14:13:43
Olli
Natürlich nichts, ich war leicht verwirrt (hänge vielleicht schon ein bisschen zu lange vor dem PC)
-.-
Wenn ich das richtig sehe, trifft das Beispiel Spaltenanordnung genau den Kern meines Problems.
Ich möchte aus einer zuvor importierten CSV-Datei Werte in ein xy-Diagramm schreiben.(Anzahl der Werte verändert sich immer).
Wenn ich ehrlich bin verstehe ich das Beispiel nicht so recht...
Könnte man nicht die bei mir als Beispiel angebenen Werte von 2-10:
.XValues = "=Tabelle1!$A$2:$A$10"
.Values = "=Tabelle1!$T$2:$T$10"
variable gestalten? Also:
.XValues = "=Tabelle1!$A$2:$A$(Spalte mit dem letzten Wert)"
.Values = "=Tabelle1!$T$2:$T$(Spalte mit dem letzten Wert)"

Anzeige
AW: Diagramm enthält eine Reihe(Kurve) zu viel
26.02.2014 14:53:28
Beverly
Hi Olli,
da gibt es überhaupt nichts mit VBA zu machen - du erstellst das Diagramm einmalig von Hand und weist ihm wie in dem Beispiel den sich an die Anzahl an vorhandenen Daten dynamisch anpassenden Bereich mittels definiertem Namen zu.


AW: Diagramm enthält eine Reihe(Kurve) zu viel
26.02.2014 15:06:37
Olli
Das ganze soll ja nicht nur einmalig passieren...
Mir geht es darum eine Excelforlage zu erschaffen, die eine (oder mehrere) CSV-Datein importiert und die Werte als Diagramm darstellt.
Ich will nicht bei jeder neuen Exceldatei den Wertebereich des Diagramms angeben müssen...
Mitlerweile habe ich ein Dokument, welches zwei Button besitzt, einen um eine CSV-Datei zu importieren um entweder eine Tabelle anzulegen oder falls bereits vorhanden zu erweitern und einen Button zum erstellen eines Diagramms, welches die Werte der A-Spalte als x-Werte und die der T-Spalte also Y-Werte besitzt.

Anzeige
AW: Diagramm enthält eine Reihe(Kurve) zu viel
26.02.2014 15:44:01
Beverly
Wenn du eine Vorlage erstellst - was hindert dich daran, in der Vorlage bereits das Diagramm zu erstellen und dynamisch zu gestalten wie in dem Beispiel? Anschließend lädst du nur die Daten per VBA aus der CSV-Datei und das Diagramm passt sic hautomatisch an.


AW: Diagramm enthält eine Reihe(Kurve) zu viel
28.02.2014 08:57:13
Olli
Okay habe jetzt eine Lösung gefunden, mit der ich leben kann.
Auf einem Button kann ich CSV-Datein importieren und auf Kontrollbutton blende ich die Diagramme ein oder aus. Schonmal ein großes Danke bis hierhin^^
Ich habe allerding noch ein weitere Problem und zwar bekomme ich die Meldung "Einlesen hinter Dateinende", sobald die CSV-Datei eine gewisse Anzahl an Spalten beinhaltet.
Code:
  With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
.Title = "Datei wählen"
.InitialFileName = "c:\Messungen\*.csv"
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, 3)
.Cells(lngLast, 1).Resize(, UBound(arrTmp) + 1) _
= Application.Transpose(Application.Transpose(arrTmp))
End With
End If
Next lngR
End If
Kann mir einer sagen warum das so ist und ob es eine Lösung dazu gibt?

Anzeige
AW: Diagramm enthält eine Reihe(Kurve) zu viel
28.02.2014 10:23:17
Olli
Ich habe gerade herausgefunden, dass der Fehler, wenn ich die csv datei vor dem import im editor aufmache und abspeicher, nicht mehr auftaucht.
Also scheinen die von mir zuvor erstellen csv-datein beschädigt zu sein, alles sehr komisch ;-)
Hatte jemand schonmal gleiche Probleme oder kann was mit diesem Problem anfangen?

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige