Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
800to804
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
800to804
800to804
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Ersetzen nur zwischen bestimmter String Marken

Ersetzen nur zwischen bestimmter String Marken
12.09.2006 16:14:31
Martin
Hallo Zusammen
Damit ich eine xml Datei welche sehr gross ist automatisch mit Standardwerten angleichen kann habe ich aus dem Forum den folgenden Script gefunden. Das Ersetzen würde natürlich bestens funktionieren, aber es soll immer nur zwischen zwei eindeutig bestimmten Markierungen angewendet werden und nicht generell auf alle identischen Strings weil sonst zuviel verändert wird.
z.B.
Suchen nach:
"forecast-adjustment"
hier jede zeile ersetzen bis zum String
"/forecast-adjustment"
jetzt nicht mehr ersetzen bis zum nächsten
"forecast-adjustment"
Und so weiter.
Hier das Script:

Sub SubstituteSave()
Dim arr() As String
Dim iCounter As Integer
Dim sSource As String, sTarget As String, sTxtA As String
Dim sTxtB As String, sTxt As String, sPath As String
sPath = ThisWorkbook.Path & "\"
sSource = sPath & Range("b1").Value     ' Name der Textdatei
sTarget = sPath & Range("b4").Value     ' Neuer Name der Textdatei
sTxtA = Range("b2").Value               ' alter Text
sTxtB = Range("b3").Value               ' neuer Text
Close
Open sSource For Input As #1
Do Until EOF(1)
Line Input #1, sTxt
If InStr(sTxt, sTxtA) Then
sTxt = Replace(sTxt, sTxtA, sTxtB)
End If
iCounter = iCounter + 1
ReDim Preserve arr(1 To iCounter)
arr(iCounter) = sTxt
Loop
Close
Open sTarget For Output As #1
For iCounter = 1 To UBound(arr)
Print #1, arr(iCounter)
Next iCounter
Close
On Error GoTo ERRORHANDLER
Shell "notepad " & sTarget, vbMaximizedFocus
Exit Sub
ERRORHANDLER:
MsgBox " Job erledigt!"
End Sub

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ersetzen nur zwischen bestimmter String Marke
12.09.2006 16:45:01
Josef Ehrensberger
Hallo Martin!
Ungetestet.
Sub SubstituteSave()
Dim arr() As String
Dim iCounter As Integer
Dim sSource As String, sTarget As String, sTxtA As String
Dim sTxtB As String, sTxt As String, sPath As String
Dim strMatch1 As String, strMatch2 As String
Dim intFront As Integer, intEnd As Integer
sPath = ThisWorkbook.Path & "\"
sSource = sPath & Range("b1").Value ' Name der Textdatei
sTarget = sPath & Range("b4").Value ' Neuer Name der Textdatei
sTxtA = Range("b2").Value ' alter Text
sTxtB = Range("b3").Value ' neuer Text
strMatch1 = "forecast-adjustment" 'vordere Begrenzung
strMatch2 = "/forecast-adjustment" 'hintere Begrenzung
Close
Open sSource For Input As #1
Do Until EOF(1)
  Line Input #1, sTxt
  If InStr(1, sTxt, strMatch1) > 0 And InStr(1, sTxt, strMatch2) > 0 Then
    intFront = InStr(1, sTxt, strMatch1) + Len(strMatch1)
    intEnd = InStr(1, sTxt, strMatch2) - 1
    sTxt = Left(sTxt, intFront) & Replace(Mid(sTxt, intFront, intEnd - intFront), sTxtA, sTxtB) & Mid(sTxt, intEnd)
  End If
  iCounter = iCounter + 1
  Redim Preserve arr(1 To iCounter)
  arr(iCounter) = sTxt
Loop
Close
Open sTarget For Output As #1
For iCounter = 1 To UBound(arr)
  Print #1, arr(iCounter)
Next iCounter
Close
On Error GoTo ERRORHANDLER
Shell "notepad " & sTarget, vbMaximizedFocus
Exit Sub
ERRORHANDLER:
MsgBox " Job erledigt!"


End Sub


Gruß Sepp
Anzeige
AW: Ersetzen nur zwischen bestimmter String Marke
13.09.2006 07:30:48
Martin


Hallo Josef
es es wird nichts ersetzt, jedoch läuft der Script durch, hatte beim iCounter einen überlauffehler Nr. 6,
habe anschliessend den Variablentyp Integer gelöscht jetzt geht es. Nur es wird nichts ersetzt.
Zum test habe ich eine Musterdatei auf den Server geladen:
Das Makro im Excel:
https://www.herber.de/bbs/user/36635.xls
Die Textdatei:

Die Datei https://www.herber.de/bbs/user/36636.txt wurde aus Datenschutzgründen gelöscht

Dies ist mein angepasster Script:
Sub SubstituteSave()
Dim arr() As String
Dim iCounter
Dim sSource As String, sTarget As String, sTxtA As String
Dim sTxtB As String, sTxt As String, sPath As String
Dim strMatch1 As String, strMatch2 As String
Dim intFront As Integer, intEnd As Integer
sPath = Range("B7").Value & "\"
sSource = sPath & Range("b1").Value ' Name der Textdatei
sTarget = sPath & Range("b4").Value ' Neuer Name der Textdatei
sTxtA = Range("b2").Value ' alter Text
sTxtB = Range("b3").Value ' neuer Text
strMatch1 = "<forecast-adjustment>" 'vordere Begrenzung
strMatch2 = "</forecast-adjustment>" 'hintere Begrenzung
Close
Open sSource For Input As #1
Do Until EOF(1)
  Line Input #1, sTxt
  If InStr(1, sTxt, strMatch1) > 0 And InStr(1, sTxt, strMatch2) > 0 Then
    intFront = InStr(1, sTxt, strMatch1) + Len(strMatch1)
    intEnd = InStr(1, sTxt, strMatch2) - 1
    sTxt = Left(sTxt, intFront) & Replace(Mid(sTxt, intFront, intEnd - intFront), sTxtA, sTxtB) & Mid(sTxt, intEnd)
  End If
  iCounter = iCounter + 1
  ReDim Preserve arr(1 To iCounter)
  arr(iCounter) = sTxt
Loop
Close
Open sTarget For Output As #1
For iCounter = 1 To UBound(arr)
  Print #1, arr(iCounter)
Next iCounter
Close
On Error GoTo ERRORHANDLER
Shell "notepad " & sTarget, vbMaximizedFocus
Exit Sub
ERRORHANDLER:
MsgBox " Job erledigt!"
End Sub
Besten Dank für Deine Korrektur und Hilfe
Martin

     Code eingefügt mit Syntaxhighlighter 4.2

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige