Schönen guten Tag,
ich habe einen Ordner in dem etwas über 100csv dateien (dateiendung *.mob) liegen, mit jeder dieser dateien soll nun folgendes gemacht werden:
1) kx011.mob öffnen
1.1) nach zeichen trennen (tab, semikolon, 1. spalte nicht importieren)
1.2) speichern als kx011.xls
2) kx011.mob öffnen
2.1) mit fester breite trennen (3 zeichen, 3zeichen, 3.spalte nicht importieren)
2.2) Spalten A und B kopieren
2.3) in kx011.xls ganz links einfügen, speichern als kx011.xls
weiter mit der nächsten datei und wieder das selbe:
1) kx012.mob öffnen
1.1) nach zeichen trennen (tab, semikolon, 1. spalte nicht importieren)
1.2) speichern als kx012.xls
... soweit so einfach, wenn ich das von hand mache ist der arbeitsaufwand ca 2-3stunden (was ja noch vertretbar wäre wenn das eine einmalige aufgabe wäre), allerdings fällt das regelmäsig an und ich dachte mir "das müsste sich ja automatisieren lassen..."
also hab ich den workflow mit dem makro rekorder aufgezeichnet (bin ein absoluter vba DAU) und dachte mir "dass sollte sich ja recht einfach anpassen lassen"... nach einer weile googeln, vba handbücher wälzen, rumprobieren und rumfragen... sieht das aktuelle makro so aus:
' .mob nach xls
Sub von_hand_bearbeitet()
Dim DATcsv As String
Dim DATxls As String
Dim pfad As String
pfad = "C:\Dokumente und Einstellungen\GolderM\Desktop\tkmtest"
DATcsv = Dir$(pfad & "*.mob")
' ordner durcharbeiten
While Len(DATcsv)
DATxls = pfad & Left$(DATcsv, Len(DATcsv) - 4) & ".xls"
' Debug.Print pfad & DATcsv
' Debug.Print DATxls
' erstes öffnen, getrennt nach zeichen
Workbooks.OpenText Filename:=pfad & DATcsv, local:=True, Origin:=xlMSDOS, StartRow:=1, Tab:=True, Semicolon:=True
' speichern als .xls
ActiveWorkbook.SaveAs FileFormat:=".xls"
' zweites öffnen, feste breite
Workbooks.OpenText Filename:=pfad & DATcsv, local:=True, Origin:=xlMSDOS, StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array( _
Array(0, 1), Array(3, 1), Array(6, 9)), TrailingMinusNumbers:=True
' A B kopieren
Columns("A:B").Select
Selection.Copy
' einfügen
' Windows("kx032.xls").Activate
' Selection.Insert Shift:=xlToRight
DATcsv = Dir$
Wend
End Sub
Das makro läuft auch durch, sogar fehlerfrei... aber es macht auch nichts :D
als laie seh ich schon 2fehler:
1) kann das mit dem speichern so funktionieren? gemeint ist die zeile
ActiveWorkbook.SaveAs FileFormat:=".xls"
erreichen möchte ich damit, das immer der dateiname der gerade offenen datei genommen wird, aber eben nicht wieder als ".mob" gespeichert wird, sondern als ".xls", aber ob die zeile das tut erschließt sich mir nicht (wie gesagt, es kommen weder fehlermeldungen noch resultate).
und mir ist aufgefallen dass das so, wie ich das mit dem kopieren der Spalten A und B realisiert habe, garnicht funktionieren kann weil:
' A B kopieren
Columns("A:B").Select
Selection.Copy
' einfügen
' Windows("kx032.xls").Activate
' Selection.Insert Shift:=xlToRight
dann würde er es ja immer in "kx032.xls" einfügen, aber das ist ja nicht sinn der sache.. es soll ja der dateiname der eben verarbeiteten .mob nehmen und nur die endung bzw. den dateityp ändern, (wie) kann das realisiert werden?
für eventuell entstehende mühe(n) und geleistete hilfe(n) schonmal im vorraus einen zutiefst empfundenen, herzlichen dank
Mit freundlichen Grüßen
Marc Golder
|