Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
900to904
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
900to904
900to904
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

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

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....

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige