Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Makro zum öffnen aller dateien in einen Ordner

Makro zum öffnen aller dateien in einen Ordner
24.08.2007 17:03:32
Abtin
Guten Tag alle Zusammen,
ich habe mal eine Frage zur VBA in Excel und hoffe Ihr könnt mir helfen. Ich studiere an HAW _
und arbeite an einen Projekt....Eine Messanlage liefert mir einige Tausend Messungen als CSV _
Datei. Jede CSV Datei enthält 2000 Zeitpunkte mit je einen Spannungswert. Ich möchte bzw. muss _ diese einzelnen CSV Dateien in einer Arbeitsmappe haben und zwar für jede CSV Datei eine neue Tabelle. Vorher müssen die CSV Dateien konvertiert und eingelesen werden. Dafür habe ich bereits einen Makro:

Sub drawChart()
Dim name As Variant
Dim dif As Variant
name = ActiveSheet.name
Charts.Add
With ActiveChart
.ChartType = xlXYScatterSmoothNoMarkers
.SetSourceData Source:=Sheets(name).Range("A1:B2000"), PlotBy:=xlColumns
.Location Where:=xlLocationAsObject, name:=name
End With
ActiveChart.HasLegend = False
With ActiveChart.Axes(xlCategory)
.MinorUnitIsAuto = True
.MajorUnitIsAuto = True
.MaximumScaleIsAuto = False
.MinimumScaleIsAuto = False
.Crosses = xlAxisCrossesCustom
.CrossesAt = Sheets(name).Range("A1")
.MinimumScale = .CrossesAt
.MaximumScale = Application.WorksheetFunction.Max(Sheets(name).Range("A1:A2000"))
.ReversePlotOrder = False
.ScaleType = xlLinear
.DisplayUnit = xlNone
.TickLabels.Orientation = 90
.HasTitle = True
.AxisTitle.Characters.Text = "Time"
End With
dif = (Application.WorksheetFunction.Min(Sheets(name).Range("B1:B2000")) + Application. _
WorksheetFunction.Max(Sheets(name).Range("B1:B2000"))) / 50
With ActiveChart.Axes(xlValue)
.MinorUnitIsAuto = True
.MajorUnitIsAuto = True
.MinimumScaleIsAuto = False
.MaximumScaleIsAuto = False
.MinimumScale = Application.WorksheetFunction.Min(Sheets(name).Range("B1:B2000")) - dif
.MaximumScale = Application.WorksheetFunction.Max(Sheets(name).Range("B1:B2000")) + dif
.Crosses = xlAxisCrossesCustom
.CrossesAt = .MinimumScale
.ReversePlotOrder = False
.ScaleType = xlLinear
.DisplayUnit = xlNone
.HasTitle = True
.AxisTitle.Characters.Text = "Volatge"
End With
Range("E1").Select          'deselect chart
End 

Sub 'drawChart


Sub readCSV()
Dim file As Variant
file = Application.GetOpenFilename("CSV Files (*.csv), *.csv")
If file = False Then    'nothing to do
Exit Sub
End If
ActiveWorkbook.Worksheets.Add
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & file, Destination:=Range("A1"))
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1)
.TextFileDecimalSeparator = "."
.TextFileThousandsSeparator = "'"
.Refresh BackgroundQuery:=False
End With
'draw a button
ActiveSheet.Buttons.Add(150, 20, 70, 20).Select
Selection.OnAction = "drawChart"
Selection.Characters.Text = "drawChart"
Range("E1").Select          'deselect button
End 

Sub 'readCSV
Makro macht folgendes. Man Klickt auf read CSV und dann öffnet sich ein Dialog zur  _
Auswahl   _
_
der Datei und diese wird geöffnet und dann konvertiert. Dann ändert sich der Buttom zu draw  _
Chart und eine Graph wird gezeichnet sobald man auf dem Buttom klickt.
Meine Frage ist ob mir jemand helfen kann das Makro etwas zu verändern, da es unmöglich bei der  _
_
_
Anzahl der Messungen die ich habe, jede Datei einzeln einzulesen. Die Messungen befinden sich   _
_
alle in einen Ordner, in jedem Ordner ca. 20-30 CSV Dateien. Ich möchte dass ich die erste  _
Datei auswähle und das Makro dann automatisch alle anderen Dateien im Ordner auch öffnet und diese verarbeitet. Ganz wichtig ist dass die Tabellen dann den Namen der CSV Datei bekommen. Und dann soll der Graph nicht durch einen Extra klick auf dem Button erstellt werden sondern automatisch nach dem die Datei eingelesen und konvertiert wurde…. Wäre schön wenn mir jemand helfen könnte, ich bedanke mich für eure Mühe im Voraus und wünsche ein schönes Wochenende.
Abtin

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro zum öffnen aller dateien in einen Ordner
24.08.2007 18:52:43
Daniel
Hallo
nutze doch die Multiselect-Fähigkeit von GetOpenFileName.
dann kannst du im File-Dialog alle Dateien markieren, die du übertragen willst.
diese Dateinamen werden dann in eine Array-Variable mit 1 to x Elementen kopiert, die du dann bspw mit einer FOR-EACH-Schleife abarbeiten kannst.
könnte so aussehen:

Sub readCSV()
Dim FILES As Variant
Dim file As Variant
FILES = Application.GetOpenFilename("CSV Files (*.csv), *.csv", MultiSelect:=True)
If FILES = False Then    'nothing to do
Exit Sub
End If
For Each file In FILES
ActiveWorkbook.Worksheets.Add
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & file, Destination:=Range("A1"))
'... hier dein Weitere Makrotext
Range("E1").Select          'deselect button
Next
End Sub


Gruß, Daniel

Anzeige
AW: Makro zum öffnen aller dateien in einen Ordner
24.08.2007 19:41:00
Abtin
Herzlichen Dank für deine Mühe Daniel , das wird mich sicher weiterbringen. Ich Probiers mal aus....
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige