Schönen guten Abend,
ich hätte da ein, anscheind nicht sehr alltägliches Problem. Bin leider absolut neu und unerfahren in der verwendung von Excle bzw. VBA, hoffe deshalb hier den richtige Tipp zu bekommen. Nun aber zu meinem Anliegen.
Ich muss in 560 Excel Datein, die Werte 90 in CB und 50 in CC bis Zeile 400, einfügen wenn machbar : nur bis zur letzten Zeile in dem Excel dokument?!).
Das ist natürlich relativ schnell mit einem Makro erledigt.
Ich habe da auch etwas herumgegoogelt und versucht mir was zusammen zu basteln.
Mein erster versuch sieht so aus :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | Sub Zeta_Werte_einfuegen()
Dim strFile As String
Application.ScreenUpdating = False
strPath = "C:\Users\......\"
strExt = "*.*"
If strPath = "" Then
Exit Sub
Else
strFile = Dir(strPath & strExt)
Do While Len(strFile) > 0
Workbooks.Open Filename:=strPath & strFile
Range( "CB2" ). Select
ActiveCell.FormulaR1C1 = "90"
Selection.AutoFill Destination:=Range( "CB2:CB400" ), Type:=xlFillDefault
Range( "CB2:CB400" ). Select
Range( "CC2" ). Select
ActiveCell.FormulaR1C1 = "50"
Selection.AutoFill Destination:=Range( "CC2:CC400" ), Type:=xlFillDefault
Range( "CC2:CC40" ). Select
Workbooks(strFile).Close True
strFile = Dir()
Loop
End If
End Sub
|
Das ist ne richtig coole sache , da in dem Ordner in dem sich alle Excel Datein befinden, alle Werte automatisch geändert werden.
Nun kommt mein eigentliches Problem
Ich verwende leider keine normalen .xlsx datein, sondern .csv (MS DOS) Datein.
Und wenn man ein makro wie das obrige auf diese .csv Datein anwedet, werden die Werte 90 und 50 in spalte "a" ab zeile 70 geschrieben. Mit 29 (a->cc) punkten davor.
Nachdem ich also das problem identifierziert habe , es also am Dateiformat hängt, wollte ich ein 3 schritt workaround probieren.
Schirtt 1: die vorhandenen .csv(MS DOS) Datein aus einem Ordner neu abgespeichert als .xlsx in einem neuen Ordner abspeichern.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | Dim FSO As Object
Dim folder As Object
Dim wb As Object
csvPath = "C:\Users\...\Desktop\scv_ordner\"
xlsPath = "C:\Users\....\Desktop\neue_xlsx\"
Set FSO = CreateObject( "Scripting.FileSystemObject" )
Set CSVfolder = FSO.GetFolder(csvPath)
If FSO.FolderExists(xlsPath) = False Then
FSO.createFolder (xlsPath)
End If
Set XlsFolder = FSO.GetFolder(xlsPath)
With Application
.DisplayAlerts = False
.ScreenUpdating = False
End With
For Each wb In CSVfolder.Files
If LCase(Right(wb.Name, 3)) = "csv" Then
Set activeWB = Workbooks.Open(wb)
activeWB.SaveAs Filename:=xlsPath & "\" & Left(activeWB.Name, Len(activeWB.Name) - 3) & " xlsx", FileFormat:=xlOpenXMLWorkbook
activeWB.Close True
End If
Next
With Application
.DisplayAlerts = True
.ScreenUpdating = True
End With
End Sub
|
Schritt 2:
Wie der erste gepostete Code.
und Schritt 3 :
Wieder von .xlsx in .csv (MS DOS) zurück umwandeln.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | Public Sub XLSX_zu_CSV()
Dim FSO As Object
Dim folder As Object
Dim wb As Object
csvPath = "C:\Users\....\Desktop\test ordner\neue_csv\"
xlsPath = "C:\Users\....\Desktop\test ordner\neue_xlsx\"
Set FSO = CreateObject( "Scripting.FileSystemObject" )
Set CSVfolder = FSO.GetFolder(csvPath)
If FSO.FolderExists(xlsPath) = False Then
FSO.createFolder (xlsPath)
End If
Set XlsFolder = FSO.GetFolder(xlsPath)
With Application
.DisplayAlerts = False
.ScreenUpdating = False
End With
For Each wb In XlsFolder.Files
If LCase(Right(wb.Name, 3)) = "xlsx" Then
Set activeWB = Workbooks.Open(wb)
activeWB.SaveAs Filename:=xlsPath & "\" & Left(activeWB.Name, Len(activeWB.Name) - 3) & " csv", FileFormat:=xlCSVMSDOS
activeWB.Close True
End If
Next
With Application
.DisplayAlerts = True
.ScreenUpdating = True
End With
End Sub
|
Dem profi wird natürlich sofort auffallen das an den ganzen Codes irgendwas nicht stimmt.
Es tut mir wirklich leid, ich hab bei dem ganzen gesuche im Internet immer mehr cba codes gefunden die helfen sollten, es nicht mit meinem wissen, getan haben und ich habe es mit meinem herumgefusche mit nichten besser gemacht. Die oben beschriebenen Codes sollen eigentlich nur meine unfähigkeit zeigen, und das ich es bis hier her versucht habe. Leider hab ich nie etwas in die richtung gelernt und brauche vba in der regel nicht.
Danke an alle die bis hier her gelesen haben. Ich wünsche euch noch ein schönen Tag.
Grüße , Jens
|