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

nur für die letzten 10 Zeilen anwenden (auch@Sepp)

nur für die letzten 10 Zeilen anwenden (auch@Sepp)
14.09.2006 07:09:44
Martin
Hallo Zusammen
Habe im Forum einen Script gefunden und mit Sep angepasst. Funktioniert auch so in dieser Form für einen Teil der Dateien.
Nun eine andere zusätzliche Anforderung:
Das Ersetzen sollte nur für diel letzten 10 Zeilen vor der unteren Begrenzung (strMatch2) angewendet werden und die untere Begrenzung sollte bestehen bleiben.
Es muss nur geprüft werden ob die Zeile bereits gleich ist wie sTxtB, wenn nicht ersetze Text in Zeile mit sTxtB also keine Suche nach einem Text welcher ersetzt werden muss.
Hat da jemand eine Ahnung wie das machbar ist, habs nicht so drauf mit diesen Arrays.
Hier der 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 & "\" 'Pfad der Datei
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
Dim PrüferMatch1 As Boolean
chkMatch1 = 0
Close
Open sSource For Input As #1
Do Until EOF(1)
  Line Input #1, sTxt
  'If sTxt = sTxtA Then
  'MsgBox "treffer"
  'End If
  If InStr(1, sTxt, strMatch1) > 0 Then
    chkMatch1 = True
  End If
  If InStr(1, sTxt, strMatch2) > 0 Then
    chkMatch1 = False
  End If
  If chkMatch1 And sTxt <> strMatch1 And sTxt <> sTxtB Then
    intFront = InStr(1, sTxt, strMatch1) + Len(strMatch1)
    intEnd = InStr(1, sTxt, strMatch2) - 1
    sTxt = 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
MsgBox " Job erledigt!"
ERRORHANDLER:
End Sub

     Code eingefügt mit Syntaxhighlighter 4.2

Gruss
Martin
PS Danke Sepp für die Deine Hilfe bisher, leider wurde der Tread durch den Forumscrash gestern Mittwoch gelöscht bevor das Ergebnis fertig war.
AW: nur für die letzten 10 Zeilen anwenden (auch@S
14.09.2006 09:21:57
Josef Ehrensberger
Hallo Martin!
Weit einfacher wäre es, wenn du ein Beispiel der Textdatei hochladen würdest.
Vielleicht auch gleich das Tabellenblatt mit dem alten und neuen Text.
Gruß Sepp
AW: nur für die letzten 10 Zeilen anwenden (auch@S
14.09.2006 09:50:37
Martin
Hallo Sepp
Bitte entschuldige meine Dummheit.
Hatte diese Muster gestern hochgeladen, sind natürlich beim Reset des Forums ebenfalls verloren gegangen.
Hier nochmals die Links zu den Muster.
Txt Datei:
https://www.herber.de/bbs/user/36663.txt
Muster Excel:

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

Der Pfad zu den Dateien und der Name der txtDatei muss noch angepasst werden.
Gruss aus der Schweiz
Martin
PS es sind Mehrere Martin zur Zeit im Forum werde mir neu den Namen MartinCH zulegen fürs Forum.
Anzeige
AW: nur für die letzten 10 Zeilen anwenden (auch@S
14.09.2006 11:17:33
MartinCH
Hallo Sepp
Danke für Deine geleistete Arbeit, werde den Script an einer Originaldatei testen und umgehend Rückmelden ob erfolgreich.
Habe an diese (Deine) Variante gar nicht gedacht, dass man zuerst alles in ein Array einlesen könnte und anschliessend dieses zu editieren, einfach Clever dieser Sepp.
Ich bin von Übermenschen umgeben, dachte jüngst ich sei auch schon gut in VBA bewandert aber nix da immer wieder auf Hilfe angewiesen.
Da fehlen mir noch einige Lektionen im Forum um auch da geistig zu wachsen.
Bis bald
Martin
Anzeige
Excelent Danke Danke!!!!! Sepp for President
14.09.2006 14:13:09
MartinCH
Hallo Sepp
Nun habe ich sogar die Geschichte mit den Array's gelernt, es brauchte nur noch wenig und ich hatte mehrere Varianten erstellt die alle excelent funktionieren.
"The Best Solution" kommt von bei mir in letzter Zeit immer von Sepp.
Danke und wer weis, bis Bald.
Gruss
Martin
PS hoffentlich kann ich Dir auch einmal (vermutlich eher nicht) helfen.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige