AW: txt.-Datei einlesen und speichern
10.04.2014 16:24:17
fcs
Hallo Festim,
1. Syntax bei Cells
'Bereich mit Ersetzungsdaten setzen - Spalte A im Activen Blatt ab Zeile 3
With ActiveSheet
Set rngErsetzen = .Range(.Cells(3, 1), .Cells(.Rows.Count, 1).End(xlUp))
End With
Vor dem 2. Cells hatte ich noch den Punkt vergessen, bitte ergänzen. Spielt hier keine Rolle, da sich sowieso alles auf das aktive Blatt bezieht, aber nur mit Punkt ist die Syntax korrekt.
Bei Cells ist der 1. Parameter immer die Zeile, der 2. Parameter die Spalte (1 = A, 2 = B usw.)
.Cells(.Rows.Count, 1).End(xlUp)
ist eine spezielle Anweisung. Sie sucht von der angegeben Zelle (hier = letzte Zelle in Spalte 1) die aus nächste Zeile mit Inhalt; entspricht der Tastenkombination Strg+Pfeilhoch.
'Vorgabe für neuen Dateinamen festlegen
varFileZiel = varFileMuster
varFileZiel = Left(varFileZiel, InStrRev(varFileZiel, ".") - 1)
varFileZiel = "Mein" & Mid(varFileZiel, InStrRev(varFileZiel, "\") + 1)
Warum hast du einmal "- 1" und einmal "+ 1" gesetzt? Was genau bewirkt das?
Die Funktion InStrRev ermittelt die Position des angegebenen Suchtextes beginnend von rechts.
In der 1. Zeile soll mit der Funktion Left der Text links vom "." übernommen werden; deswegen die "-1".
In der 2. Zeile soll mit der Funktion Mid der Text rechts vom "\" übernommen werden; deswegen die "+1".
Die Variabel bolTreffer heißt, dass wenn er den CP wert findet setzt dieser dann auf True sonst False?
Der Wert von bolTreffer steuert ob der OriginalText aus der Muster-STEP ein neuer Text in die neue Datei geschrieben wird. Deshalb wird nach dem Einlesen einer Zeile aus der Msuter-STEP ihr Wert auf False gesetzt. Führt eine der Vergleichs-Prüungen zu einer Übereinstimmung wird der Ersatztext ermittelt und die Variable auf True gesetzt.
#188 = PRODUCT ( 'TEST2_ohne loch', 'TEST2_ohne loch', '', ( #27 ) ) ;
1. Weiß ich nicht ob's so richtig ist, da die Hochkommas in der Klammer mir ein Rätsel sind. Siehe auch ADVANCED_....( '")
Das Hochkomma ' kennzeichnet in STEP-Datei Anfang und Ende eines Textinhalts, so wie das " unter VBA.
Hier wird das Erzeugen des neuen Textes etwas komplizierter, am Ende benötigst du ja:
Text bis inkl. 1. "'" & NameNeu & "', " & NameNeu & Text ab "', '" bis zum Ende.
Da der Name der neuen STEP-Datei mit und ohne ".STEP" jetzt mehrfach benötigt wird ist es sinnvoll, diese einmal zu ermitteln und jeweils einer Variablen zuzuweisen. Das vereinfacht den Code etwas. Nachfolgend nochmals der komplette Code mit den Anpassungen für die PRODUCT-Zeile.
2. Als Fehlermedlung kommt EndIf ohne If-Block....mit größter Wahrscheinlichkeit setzt ich das EndIf falsch an bzw. an der falschen Zeile.
Hier hast du dann irgendwie die Syntax von
If ...
ElseIf ...
ElseIf ...
Else ...
End If
nicht korrekt eingehalten
Gruß
Franz
Sub MakeNewSTEP_Range(ByVal varFileSource As Variant, _
ByVal varFileTarget As Variant, ByVal rngReplace As Range)
'Ersetzungsdaten werden aus Exceltabelle geladen
Dim Zeile As Long, FF1 As Integer, FF2 As Integer
Dim strText As String, bolTreffer As Boolean, strReplace As String
Dim rngZelle As Range
Dim strNameSTEP As String, strName_ohne_STEP As String
'Musterdatei öffen
FF1 = FreeFile()
Open varFileSource For Input As #FF1
'Zieldatei öffnen/anlegen - vorhandenen Zieldatei wird überschrieben!!
FF2 = FreeFile()
Open varFileTarget For Output As #FF2
Zeile = 0
'Name der neuen STEP-Datei ohne Pfad = Text rechts vom letzen "\"
strNameSTEP = Mid(varFileTarget, InStrRev(varFileTarget, "\") + 1)
'Name der neuen STEP-Datei ohne Pfad und ohne ".STEP" = Text links vom "."
strName_ohne_STEP = Left(strNameSTEP, InStrRev(strNameSTEP, ".") - 1)
Do Until EOF(FF1)
Line Input #FF1, strText
bolTreffer = False
If Left(strText, 12) = "FILE_NAME ('" Then
'FILE_NAME ('TEST2_ohne loch.STEP',
strReplace = "FILE_NAME ('" & strNameSTEP & "',"
bolTreffer = True
ElseIf InStr(1, strText, "= ADVANCED_BREP_SHAPE_REPRESENTATION ( '") > 0 Then
'#202 = ADVANCED_BREP_SHAPE_REPRESENTATION ( 'TEST2_ohne loch', ( #146, #177 ), #173 ) ; _
strReplace = Left(strText, InStr(1, strText, "'")) _
& strName_ohne_STEP _
& Mid(strText, InStrRev(strText, "'"))
bolTreffer = True
ElseIf InStr(1, strText, "= PRODUCT ( '") > 0 Then
'#188 = PRODUCT ( 'TEST2_ohne loch', 'TEST2_ohne loch', '', ( #27 ) ) ;
strReplace = Left(strText, InStr(1, strText, "'")) _
& strName_ohne_STEP & "', '" & strName_ohne_STEP _
& Mid(strText, InStrRev(strText, "', '"))
bolTreffer = True
ElseIf strText "" Then 'Zeile in STEP-Datei ist nicht leer
'prüfen, ob Zeile mit # beginnt und ein = enthält
If Left(strText, 1) = "#" Then
If InStr(1, strText, "=") > 0 Then
'Zellbereich mit neuen Zeilen-Daten mit Zeile aus STEP_Datei vergleichen
For Each rngZelle In rngReplace.Cells
strReplace = rngZelle.Text
If strReplace "" Then
If InStr(1, strReplace, "=") > 0 Then
'prüfen, ob Text bis zum Gleichheitszeichen identisch
If Left(strReplace, InStr(1, strReplace, "=")) _
= Left(strText, InStr(1, strText, "=")) Then
bolTreffer = True
Exit For
End If
End If
End If
Next rngZelle
End If
End If
End If
If bolTreffer = True Then
Print #FF2, strReplace
Else
Print #FF2, strText
End If
Loop
Close FF1
Close FF2
End Sub