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