Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1096to1100
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

Mehrere ASCII-Dateien automatisch abarbeiten

Mehrere ASCII-Dateien automatisch abarbeiten
Daniel
Hallo,
Ich schreibe zur Zeit an meiner Bachlorarbeit, für die ich einige hundert Messungen gemacht habe. Die Messkurven wurden dabei als ASCII-Dateien mit ca. 30.000 Zeilen gespeichert. Um die Kurven für meine Anlage in Excel wieder als XY-Punktdiagramm darzustellen, müsste ich jede ASCII-Datei laden und den Diagrammbereich auswählen.
Gibt es irgendeine Möglichkeit die XY-Diagrammerstellung aus 2 Spalten zu automatisieren? Ich muss ca. 500 Datensätze bearbeiten.
Gruß Daniel
AW: Mehrere ASCII-Dateien automatisch abarbeiten
25.08.2009 12:34:45
MichaV
Hallo,
ja.
Beschreib mal genau was Du willst und Dir wird geholfen werden.
Gruß- Micha
AW: Mehrere ASCII-Dateien automatisch abarbeiten
25.08.2009 14:26:32
Daniel
Hi Micha,
ich schicke mal eine von den ASCII-Dateien und die Excel-Datei die ich daraus haben wollen würde mit. Ich hab wie gesagt ne Menge davon und alle müssen im Prinzip nur in ein XY-Diagramm verwandelt werden.
Die Zeit soll auf die X-Achse (1. Spalte) das Drehmoment auf die Y-Achse (2. Spalte). Falls möglich sollte die X-Achse so skaliert sein, dass auch nur der Wertebereich angezeigt wird. Sprich wenn die Messung von Sekunde 19,3 bis Sekunde 23,4 geht, ist eine Skalierung von 0-30 Sekunden ungüngstig. Ich hoffe da lässt sich was machen.
Gruß Daniel
https://www.herber.de/bbs/user/64040.xlsx
https://www.herber.de/bbs/user/64041.txt
P.S.: Normalerweise haben die Dateien die Endung *.ASC. Habs nur für den Upload in *.txt geändert.
Anzeige
AW: Mehrere ASCII-Dateien automatisch abarbeiten
25.08.2009 23:11:01
MichaV
Hallo,
kopiere das hier in den Codeteil Deines vorhandenen Arbeitsblattes, passe den Pfad an und versuch Dein Glück:

Option Explicit
Sub einlesen()
Dim strDatei As String
Dim strZeile As String
Dim i As Long
Dim s() As String
Const cPfad = "d:\Micha\Excel\"
strDatei = Dir(cPfad & "*.asc")
Do While strDatei  ""
Worksheets(1).Copy after:=Sheets(Sheets.Count)
With ActiveSheet
.Cells.ClearContents
.Name = strDatei
End With
With ActiveSheet.QueryTables.Add(Connection:="TEXT;d:\Micha\Excel\64041.asc", Destination:= _
ActiveSheet.Range("$A$1"))
.Name = "xyz"
.FieldNames = True
.RowNumbers = False
.PreserveFormatting = True
.RefreshStyle = xlInsertDeleteCells
.SaveData = True
.AdjustColumnWidth = False
.TextFilePlatform = 1252
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileTabDelimiter = True
.TextFileColumnDataTypes = Array(1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
.Delete
End With
i = ActiveSheet.Cells(1, 1).End(xlDown).Row
With ActiveSheet.ChartObjects("Diagramm 1").Chart
.SetSourceData Source:=ActiveSheet.Range("A8:B" & i)
.Axes(xlCategory).MinimumScale = Int(WorksheetFunction.Min(ActiveSheet.Range("a1:a" & i) _
))
.Axes(xlCategory).MaximumScale = 1 + Int(WorksheetFunction.Max(ActiveSheet.Range("a1:a"  _
& i)))
End With
strDatei = Dir()
Loop
End Sub

Gruß- Micha
Anzeige
AW: Mehrere ASCII-Dateien automatisch abarbeiten
26.08.2009 02:28:25
fcs
Hallo Daniel,
hier eine Steuerungsdatei zur Bearbeitung von Textdateien, die ich an dein Diagramm-Problem angepasst habe.
Bevor du das Makro auf die Dateien losläßt, solltest du genau prüfen, ob das Musterdiagramm im Blatt "Muster" alle erforderlichen Informationen und Formatierungen enthält.
Es ist relativ mühselig im Nachlauf Änderungen an Diagrammen per Makro durchzuführen.
Falls du weiter Informationen aus dem Tabellenblatt ins Diagramm per Formel oder Verknüpfungen übernehmen willst, dann muss ggf. auch das Makro nochmals angepasst werden, da beim Kopieren eines Diagramms die Verknüpfungen zur Quelle erhalten bleiben.
https://www.herber.de/bbs/user/64052.xlsm
Gruß
Franz
Anzeige
AW: Mehrere ASCII-Dateien automatisch abarbeiten
26.08.2009 09:39:02
Daniel
Hallo Micha, hallo Franz,
Also ich hab erstmal Michas Code ausprobiert, aber da ich ein absoluter VBA/Makro Anfänger bin war das nicht so von Erfolg gekrönt. Ich habe einige meiner ASC-Dateien in einen seperaten Ordner gepackt, eine davon mit Excel geöffnet und den Code in den noch nicht Vorhandenen der Tabelle 1 eingefügt, die Pfade geändert und dann ausführen lassen. Ist aber nichts passiert.
Die Makrodatei von Franz hat hingegen schon super funktioniert. Jedoch liegt in jeder erstellten *.xlsx-Datei eine Kopie des Musterdiagramms aus der *.xlsm-Datei über dem Diagramm, das zur aktuellen Datei gehört. Kann ich das noch so abändern, dass das nicht passiert, dann wäre ich quasi wunschlos glücklich?
Schonmal vielen Dank euch beiden.
Gruß Daniel
P.S.: Hier mal was bei dem Makro von Franz rauskommt.
https://www.herber.de/bbs/user/64055.xlsx
Anzeige
AW: Mehrere ASCII-Dateien automatisch abarbeiten
26.08.2009 09:53:53
MichaV
Hei,
ja, gestern war es spät, ich hätte mehr Erklärungs schreiben sollen.
Also, Du musst den Code in Deine Mappe (wie hochgeladen) in den Codebereich des einzigen Arbeitsblattes einfügen. Dazu rechte Maustaste auf die Lasche des Tabellenblattes und "Code anzeigen" drücken. Dann musst Du noch den Pfad anpassen, soweit Deine Dateien nicht in C:\Micha\Excel liegen. Dann führst Du das Makro aus. Folgedes wird passieren:
- das erste Blatt wird kopiert, die Daten gelöscht
- die erste Textdatei wird gelesen und die Daten in das kopierte Blatt eingefügt
- das Diagramm wird angepasst
usw. bis alle Textdateien gelesen sind. Am Ende hast Du eine Excel- Datei mit 500 Blättern, soweit 500 Textdateien in dem Verzeichnis liegen.
Was Du machen musst ist lediglich den Code zu kopieren, den Pfad anzupassen und auszuführen.
Gruß- Micha
Anzeige
AW: Mehrere ASCII-Dateien automatisch abarbeiten
26.08.2009 10:15:54
Daniel
Hi Micha,
Ich hab einfach mal ein paar meiner Dateien in einen Testordner gepackt, die erste geöffnet und _ schnell ein Diagramm erstellt. Den Code habe ich dann an besagter stelle eingefügt und beim ersten Pfad meinen Pfad eingegeben. Ich bin mir nicht ganz sicher, was ich bei

With ActiveSheet.QueryTables.Add(Connection:="TEXT;d:\Micha\Excel\64041.asc", Destination:= _
ActiveSheet.Range("$A$1"))
einsetzen muss. Beim ausführen wurden aber in der Tat alle im Ordner befindlichen Kurven eingelesen und die Skalierung angepasst, jedoch waren die Werte aller Tabellen die aus der ersten. Ansonsten wäre auch diese Lösung super.
Gruß Daniel
Anzeige
AW: Mehrere ASCII-Dateien automatisch abarbeiten
26.08.2009 10:27:16
MichaV
Hallo Daniel,
sorry für diesen Fehler, war wirklich spät für mich gestern abend...
So klappts:
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & cPfad & strDatei, Destination:= _
ActiveSheet.Range("$A$1"))
Gruß- Micha
AW: Mehrere ASCII-Dateien automatisch abarbeiten
26.08.2009 10:49:31
Daniel
Super, jetzt klappts. Da fällt mir ein großer Stein vom Herzen.
Ich kann euch garnicht genug danken. Ich hab mich schon eine Woche XY-Diagramme erstellen sehen ;)
Gruß Daniel
Danke für die Rückmeldung mT
26.08.2009 10:51:36
MichaV
Fein. Viel Erfolg mit Deiner Arbeit!
Gruß- Micha
AW: Mehrere ASCII-Dateien automatisch abarbeiten
26.08.2009 12:52:47
fcs
Hallo Daniel,
da ist uns eine unterschiedlich Einstellungen für das Kopieren von Excel-Objekten zum Verhängnis geworden. Bei mir werden Objekte nicht zusammen mit den übergeordneten Zellen kopiert. Deshalb musste ich im Code das Diagramm nach dem Kopieren "hinterher kopieren".
Ich hab die Prozedur jetzt so angepasst, dass die Option ggf. vorübergehend auf True gesetzt wird, so dass das eingebettete Diagramm immer zusammen mit dem Muster-Tabellenblatt kopiert wird.
Gruß
Franz
'Erstellt mit Excel 2007, Windows Vista
'fcs - 2009-08-26
Sub MainProcedure()
'Variablen - Deklarationen
Dim wbQuelle As Workbook, wksQuelle As Worksheet
Dim wbZiel As Workbook, wksZiel As Worksheet, wksMuster As Worksheet
Dim Pfad_ASC As String, Pfad_Diag As String, strASC_Datei As String
Dim objChart As Chart, Reihe As Series, objAxis As Axis
Dim ZeileStart As Long, ZeileEnde As Long, lngCount As Long
Dim bolObjectCopy As Boolean
'Kopieroption für Objekte setzen
bolObjectCopy = Application.CopyObjectsWithCells 'Objekt-Kopier-Option merken
If objectCopy = False Then Application.CopyObjectsWithCells = True
'Pfad der ASC-Dateien
Pfad_ASC = Worksheets("Steuerung").Range("D5")
'Pfad für erstellte Diagramm-Dateien
Pfad_Diag = Worksheets("Steuerung").Range("D7")
'Musterblatt in dieser Datei
Set wksMuster = ThisWorkbook.Worksheets("Muster")
'ASC-Dateien suchen
strASC_Datei = Dir(Pfad_ASC & "\*.ASC")
Application.ScreenUpdating = False
Do Until strASC_Datei = ""
lngCount = lngCount + 1
Application.StatusBar = "Diagramm wird erstellt aus: " & strASC_Datei _
& "   Datei-Nr. " & lngCount
'ASC-Datei als Arbeitsmappe öffnen (Quelle)
Application.Workbooks.OpenText Filename:=Pfad_ASC & "\" & strASC_Datei, _
Origin:=xlWindows, startrow:=1, DataType:=xlDelimited, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=False, DecimalSeparator:=",", Local:=True
'Quellen-Objekte setzen
Set wbQuelle = ActiveWorkbook
Set wksQuelle = wbQuelle.Worksheets(1)
'Musterblatt in neue Arbeitsmappe kopieren (Ziel)
wksMuster.Copy
'Ziel-Objekte setzen
Set wbZiel = ActiveWorkbook
Set wksZiel = wbZiel.Worksheets(1)
'Blattname setzen = Blattname in ASC-DAtei
wksZiel.Name = wksQuelle.Name
With wksZiel
'Altdaten im Diagrammblatt weitestgehend löschen
.Range(.Cells(10, 1), Cells(.Rows.Count, 2).End(xlUp)).ClearContents
'Daten aus ASC-Datei kopieren und als Werte einfügen
With wksQuelle
.Range(.Columns(1), .Columns(2)).Copy
End With
.Cells(1, 1).PasteSpecial Paste:=xlValues
'ASC-Quelldatei wieder schliessen - Alarmmeldungen deaktivieren wegen _
großer Datenmenge in Zwischenablage
Application.DisplayAlerts = False
wbQuelle.Close savechanges:=False
Application.DisplayAlerts = True
'der Datenreihe die kopierten Werte zuweisen
Set objChart = .ChartObjects(1).Chart
ZeileStart = 8      '1. Zeile mit Diagrammdaten
ZeileEnde = .Cells(.Rows.Count, 1).End(xlUp).Row 'Letzte Zeile mit Diagrammdaten
Set Reihe = objChart.SeriesCollection(1)
Reihe.XValues = .Range(.Cells(ZeileStart, 1), .Cells(ZeileEnde, 1))
Reihe.Values = .Range(.Cells(ZeileStart, 2), .Cells(ZeileEnde, 2))
'Kategorienachse skalieren (Min- und Max-Wert)
Set objAxis = objChart.Axes(Type:=xlCategory)
With objAxis
.MinimumScale = Int(wksZiel.Cells(ZeileStart, 1))
.MaximumScale = VBA.Round(wksZiel.Cells(ZeileEnde, 1) + 0.49, 0)
End With
End With
'Erstellte Diagramm-Datei speichern im Excel 2007-Format und schliessen
wbZiel.SaveAs Filename:=Pfad_Diag & "\" & wksZiel.Name & ".xlsx", _
FileFormat:=xlWorkbookDefault, addtoMRU:=False
wbZiel.Close
'nächste ASC-Datei zuweisen
strASC_Datei = Dir
Loop
'Kopieroption für Objekte zurücksetzen
If bolObjectCopy = False Then Application.CopyObjectsWithCells = False
Application.StatusBar = False
Application.ScreenUpdating = True
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige