Nou daar ben ik dan weer.
Ik ben aan het puzzelen geslagen en heb nu 2 macro's die "iets" doen maar hoe deze samen te voegen is mij even onduidelijk.
Ik zal mijn "wens" nog eens beschrijven en daaronder de code van de macto's tonenen.
Wat wil ik:
Ik heb per maand 30 .scv files die ik in één keer wil laten samenvoegen tot 1 nieuwe Excel sheet.
De lay-out van de files zijn:
Code:
sep=;
Version CSV1|Tool SE|Linebreaks CR/LF|Delimiter semicolon|Decimalpoint comma|Precision 3
;SN: 2120005212;SN: 2120005212
;SB 2000HF-30;SB 2000HF-30
;2120005212;2120005212
;Totale opbrengst;Vermogen
;Counter;Analog
dd-MM-yyyy HH:mm:ss;kWh;kW
01-05-2012 00:00:00;528,049;0,000
01-05-2012 00:05:00;528,049;0,000
01-05-2012 00:10:00;528,049;0,000
01-05-2012 00:15:00;528,049;0,000
01-05-2012 00:20:00;528,049;0,000
01-05-2012 00:25:00;528,049;0,000
01-05-2012 00:30:00;528,049;0,000
01-05-2012 00:35:00;528,049;0,000
01-05-2012 00:40:00;528,049;0,000
01-05-2012 00:45:00;528,049;0,000
Er zijn 8 rijen waarvan ik alleen de laatste "koprij" (dd-MM-yyyy HH:mm:ss Kwh KW) wil hebben en er zijn 4 kolommen.
Deze 4 kolommen zijn als volgt van elkaar gescheiden:
Kolom 1 2 (dd-MM-yyyy HH:mm:ss) gescheiden door een
spatie.
Kolom 2, 3 en 4 (HH:mm:ss;kWh;kW) zijn gescheiden door een
puntkomma ;
Van Edmoor heb ik een macro ontvangen die keurig alle .CSV-files inleest die in een opgegeven directory aanwezig zijn maar er wordt helaas maar 1 rij per file terug gegeven.
Deze macro ziet er als volg uit:
Code:
Sub snb()
For Each it In Application.GetOpenFilename("CSV Files (*.csv), *.csv", , , , True)
With GetObject(it)
With .Sheets(1).Cells(1).CurrentRegion.Offset(7).Resize(, 4)
ThisWorkbook.Sheets("Blad1").Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(.Rows.Count, .Columns.Count) = .Value
End With
.Close False
End With
Next
End Sub
Nu heb ik zelf, nou ja zelf, via "Macro opnemen" weten voor elkaar te krijgen dat er 1 files ingelezen wordt
én dat de kolommen goed "gespiltst worden".
Wat hier bij het probleem is:
1. Er wordt 1 file ingelezen.
2. Als ik een tweede file wil inlezen dan wordt deze file "links naast" de andere ingelezen file geplaatst op het zelfde werkblad.
Zie hieronder:
dd-MM-yyyy HH:mm:ss;kWh;kW dd-MM-yyyy HH:mm:ss;kWh;kW
2-5-2012 00:00:00;532 245;0 0 1-5-2012 00:00:00;528 049;0 0
2-5-2012 00:05:00;532 245;0 0 1-5-2012 00:05:00;528 049;0 0
2-5-2012 00:10:00;532 245;0 0 1-5-2012 00:10:00;528 049;0 0
2-5-2012 00:15:00;532 245;0 0 1-5-2012 00:15:00;528 049;0 0
2-5-2012 00:20:00;532 245;0 0 1-5-2012 00:20:00;528 049;0 0
2-5-2012 00:25:00;532 245;0 0 1-5-2012 00:25:00;528 049;0 0
2-5-2012 00:30:00;532 245;0 0 1-5-2012 00:30:00;528 049;0 0
2-5-2012 00:35:00;532 245;0 0 1-5-2012 00:35:00;528 049;0 0
2-5-2012 00:40:00;532 245;0 0 1-5-2012 00:40:00;528 049;0 0
2-5-2012 00:45:00;532 245;0 0 1-5-2012 00:45:00;528 049;0 0
2-5-2012 00:50:00;532 245;0 0 1-5-2012 00:50:00;528 049;0 0
2-5-2012 00:55:00;532 245;0 0 1-5-2012 00:55:00;528 049;0 0
2-5-2012 01:00:00;532 245;0 0 1-5-2012 01:00:00;528 049;0 0
2-5-2012 01:05:00;532 245;0 0 1-5-2012 01:05:00;528 049;0 0
2-5-2012 01:10:00;532 245;0 0 1-5-2012 01:10:00;528 049;0 0
Ik snap wel dat dat kan, ik heb natuurlijk een vaste waarde in de macro staan waar de ingelezen file geplaatst moet worden.
Als deze waarde nu "aangepast" kan worden ná het inlezen van een file dan denk ik dat ik er ben, ik zou alleen niet weten hoe dat werkt. Iets met een "variabele" en een for next etc.
Dus als de 2 genoemde macro's samengenomen kunnen worden dan dacht ik dat ik er was, maar hoe doe je dat?
Hieronder de door Macro Opnemen gegenereerde code
Code:
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;D:\Mijn Documenten\Sma-Sunny Explorer\Samengevoegd\201205\De Brink 6-20120502.csv" _
, Destination:=Range("$A$1"))
.Name = "De Brink 6-20120501"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 9
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = True
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = True
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
ActiveCell.SpecialCells(xlLastCell).Select
Range("A290").Select
End With
End Sub