AW: Fremddatei in Excel einfügen, umwandeln
07.12.2020 12:51:37
Yal
Hallo Uwe,
Du Benutzt Excel in dem Fall als "Programmiersprache".
Ich denke, Du bist besser bedient, wenn Du vom Formeln ins VBA wechselst.
Ich habe deinen Auftrag in 2 Teile getrennt:
_ Durchgehen alle Dateien in einem bestimmten Verzeichnis
_ Behandlung einer Datei
Ich verwende Excel nicht als Zwischenablage sondern wandle von FMC zu FMC-Datei.
Ungetestet und ohne Gewähr. Die originale Dateien sind zwar nicht gefährdet, aber Spiele zuerst in einem Testverzeichnismit nur ein paar Dateien-Kopie.
Offene Frage: was passiert nach Zeile 61? (siehe letzter Case-Behandlung)
Du muss auch in Extras, Verweise "Windows Scripting Runtime" anbinden.
Setzt Dich mit dem Code auseinander. Du wirst wahrscheinlich hier und da Anpassungen machen müssen.
Private FSO As FileSystemObject
Private zielName As String
Private V As Folder
Private Fq As File
Private Fz As File
Const cVerz = "C:\temp"
Sub Datei_durchgehen()
Set FSO = New FileSystemObject
Set V = FSO.GetFolder(cVerz)
If V Is Nothing Then
MsgBox "Verzeichnis """ & cVerz & """" & vbCr & "nicht vorhanden oder nicht erreichabr." _
, vbCritical + vbOKOnly, "Abbruch"
Exit Sub
End If
For Each Fq In V.Files
If Right(Fq.Name, 4) = ".fmc" And Right(Fq.Name, 6) "_A.fmc" Then
zielName = Mid(Fq.Name, Len(Fq.Name) - 4) & "_A.fmc"
If FSO.GetFile(zielName) Is Nothing Then
Datei_bearbeiten zielName
End If
End If
Next
End Sub
Sub Datei_bearbeiten(zielName As String)
Dim Dq As TextStream
Dim Dz As TextStream
Dim aktZeile As String
Dim i
Set Dq = Fq.OpenAsTextStream
Set Dz = FSO.CreateTextFile(V.Path & "\" & zielName, True)
i = 0
Do While Not Dq.AtEndOfStream
i = i + 1
aktZeile = Dq.ReadLine
Select Case i
Case 1: Dz.WriteLine "[VARDEFAU]"
Case 2: Dz.WriteLine "INH=7.0"
Case 3: Dz.WriteLine "VAR=@VERSION"
Case 4: Dz.WriteLine ""
Case 5: Dz.WriteLine "[VARDEFAU]"
Case 6: Dz.WriteLine "INH=14"
Case 7: Dz.WriteLine "VAR=@SUBVERSION"
Case 8: Dz.WriteLine ""
Case 9: Dz.WriteLine "[VARDEFAU]"
Case 10: Dz.WriteLine "INH=0.10000"
Case 11: Dz.WriteLine "VAR=@MASSTAB"
Case 12: Dz.WriteLine ""
Case 13: Dz.WriteLine "[VARDEFAU]"
Case 14: Dz.WriteLine "INH=311"
Case 15: Dz.WriteLine "VAR=@WKSEXPAND"
Case 16 To 26: Dz.WriteLine aktZeile
Case 27 To 61: Dz.WriteLine Replace(aktZeile, "60]", "30]")
' Case Is >= 27: Dz.WriteLine Replace(aktZeile, "60]", "30]")
End Select
Loop
Dq.Close
Dz.Close
End Sub
Es wäre übrigens auch mit Power Query gut machbar. Siehe dafür die gute youtube-Videos von ExcelHero.
Viel Erfolg
Yal