Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1764to1768
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
Inhaltsverzeichnis

Shell "notepad " soll speichern...

Shell "notepad " soll speichern...
19.06.2020 16:17:17
Marc
Hallo,
ich habe ein tolles Makro hier in dem Forum gefunden, welches exakt das tut, was ich brauche, allerdings soll der die Textdateien nicht anzeigen, sondern einfach speichern...
Hier ist der Code:
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 i, letztezeile As Long
letztezeile = Sheets("Recherche").Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To letztezeile
sPath = "E:\Import\Test\"  'ThisWorkbook.Path & "\"
sSource = sPath & Sheets("Recherche").Range("A" & i).Value  'sPath & Range("b1").Value     '  _
Name der Textdatei
sTarget = Sheets("Recherche").Range("A" & i).Value    ' Neuer Name der Textdatei
sTxtA = "Blödsinn"               ' alter Text
sTxtB = "Marc+TEST"               ' 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!"
Next
End Sub
Ich nehme an, es liegt an der Zeile :
Shell "notepad" & sTarget, vbMaximizedFocus
Was muss ich schreiben, damit er die Textdatei einfach unter gleichem Namen abspeichert, also quasi überspeichert?
Danke und Gruß
Marc

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Shell "notepad " soll speichern...
19.06.2020 17:09:17
onur
Lass doch einfach das alles weg:
On Error GoTo ERRORHANDLER
Shell "notepad " & sTarget, vbMaximizedFocus
Exit Sub
ERRORHANDLER:
MsgBox " Job erledigt!"

AW: Shell "notepad " soll speichern...
19.06.2020 17:13:13
volti
Hallo Marc,
ich verstehe Dein Anliegen nicht ganz.
Dieses hier

Open sTarget For Output As #1
For iCounter = 1 To UBound(arr)
Print #1, arr(iCounter)
Next iCounter
Close

schreibt die Daten in eine Datei. Die ist damit auch gleichzeitig gespeichert.
Der Shell-Befehl zeigt die Daten dann im Notepad an. Wenn Du das nicht braucht, kannst Du den doch einfach weglassen.
Und wofür ist die Schleife For i = 1 To letztezeile, wenn doch immer nach der ersten Zeile rausgesprungen wird?
viele Grüße
Karl-Heinz
Anzeige
AW: Shell "notepad " soll speichern...
19.06.2020 21:25:46
Marc
Hallo Karl Heinz,
Das erklärt warum immer nur die erste Zeile meines Tabellenblattes geändert wird.
:-/
Was müsste man tun, damit meine Schleife greift und nacheinander alle Einträge in der Tabelle bearbeitet würden?
Danke und Gruß
Marc
AW: Shell "notepad " soll speichern...
19.06.2020 21:28:56
onur
"Was müsste man tun, damit meine Schleife greift und nacheinander alle Einträge in der Tabelle bearbeitet würden?" - das habe ich dir vor 4 Stunden schon geschrieben!
AW: Shell "notepad " soll speichern...
19.06.2020 22:24:54
volti
Genau das, was onur schrieb.
Kann ich mich nur anschließen.
VG KH
AW: Shell "notepad " soll speichern...
22.06.2020 07:52:49
Marc
Hallo ihr Lieben,
ich verstehe es einfach nicht... :(
Ich habe nun den Code wie folgt verändert:
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 i, letztezeile As Long
letztezeile = Sheets("Recherche").Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To letztezeile
sPath = "E:\Import\Test\"  'ThisWorkbook.Path & "\"
sSource = sPath & Sheets("Recherche").Range("A" & i).Value  'sPath & Range("b1").Value     '  _
Name der Textdatei
sTarget = Sheets("Recherche").Range("A" & i).Value    ' Neuer Name der Textdatei
sTxtA = "Blödsinn"               ' alter Text
sTxtB = "Marc+TEST"               ' 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!"
Next
End Sub
Nun tut er aber gar nichts mehr. Bzw. ich verstehe nicht, wie onur geschrieben hat, dass er dann die Datei abspeichert. Aber wohin? Im Ursprungsverzeichnis bleiben die Dateien mit dem ursprünglichen Daten und Zeitstempeln liegen.
Habe am Wochenende versucht das alles zu verstehen, leider erfolglos...
Im arr(icounter) steht auch, wenn ich eine Stopmarke setze "Außerhalb des gültigen Bereiches. Könnte es daran liegen?
LG
Marc
Anzeige
AW: Shell "notepad " soll speichern...
22.06.2020 09:44:04
volti
Hallo Marc,
habe Dein Makro mal ein bisschen angepasst und erweitert. Hoffentlich in Deinem Sinne.
Im aktuellen Makro wird die Quelldatei unter gleichem Namen wieder zurückgeschrieben (quasi ersetzt)
Wenn Du Zielpfad und/oder Zieldatei änderst, kannst Du natürlich auch eine Kopie erstellen lassen.
PS: Du hattest bei Deiner Zieldatei den Pfad vergessen, so dass Deine Datei(en) wahrscheinlich irgendwo in einem gerade aktiven Pfad abgelegt wurden.
Teste mal, ob Du hiermit Deinem Ziel schon etwas näher kommst:
Option Explicit
Sub SubstituteSave()
'Sub ersetzt Suchbegriffe in allen Dateien laut Liste
 Dim arr() As String
 Dim iCounter As Integer
 Dim sSource As String, sTarget As String, sSuchtext As String
 Dim sErsetztext As String, sTxt As String
 Dim sSourcePath As String, sTargetPath As String
 Dim iZeile As Long, letzteZeile As Long
 Dim WSh As Worksheet
 
 sSourcePath = "E:\Import\Test\"  'ThisWorkbook.Path & "\"
 sTargetPath = "E:\Import\Test\"  'ThisWorkbook.Path & "\"
 Set WSh = Sheets("Recherche")              'Referenz setzen
 letzteZeile = WSh.Cells(Rows.Count, 1).End(xlUp).Row
 
 For iZeile = 1 To letzteZeile              'Alle Zeilen durchgehen
'Quelldatei ermitteln
   sSource = sSourcePath & WSh.Range("A" & iZeile).Value    'Name der Textdatei
   If sSource Like "*:*.*" Then             'Sicherstellen, dass es ein Dateiname ist
    
    sTarget = sTargetPath & WSh.Range("A" & iZeile).Value   'Neuer Name der Textdatei
    If sTarget Like "*:*.*" Then            'Sicherstellen, dass es ein Dateiname ist
     sSuchtext = "Blödsinn"                 ' alter Text
     sErsetztext = "Marc+TEST"              ' neuer Text
  
'Daten aus Datei in Array einlesen, Such durch Ersetz ersetzen
     If Dir$(sSource) <> "" Then            'Sicherstellen, dass Datei exitiert
       Close
       Open sSource For Input As #1
       Do Until EOF(1)
         Line Input #1, sTxt
         iCounter = iCounter + 1
         ReDim Preserve arr(1 To iCounter)
        arr(iCounter) = Replace(sTxt, sSuchtext, sErsetztext)
       Loop
       Close #1
'Daten aus Array in Datei schreiben und speichern
       Open sTarget For Output As #1
       For iCounter = 1 To UBound(arr)
           Print #1, arr(iCounter)
       Next iCounter
       Close #1
    
     End If
    End If
   End If
 
 Next iZeile
 
 MsgBox " Job erledigt!", vbInformation, "Daten speichern"
End Sub

Viele Grüße aus Freigericht
Karl-Heinz

Anzeige
Wow, jetzt tut es genau das, was ich wollte!!
22.06.2020 09:58:33
Marc
Danke!!!!!!
AW: Shell "notepad " soll speichern...
25.06.2020 08:12:09
Herbert
Hallo Luschi,
als eifriger Mitleser, habe ich mir deinen/Nepumuk's Code gleich gekrallt und getestet. Doch bei mir wird keine der 3 möglichen MsgBoxen angezeigt. Was mache ich da falsch? Ich habe den Code in einer AM getestet, die schon existiert, also in einem Ordner vorhanden ist.
Servus
AW: Shell "notepad " soll speichern...
25.06.2020 08:19:10
Herbert
Hallo Luschi,
als eifriger Mitleser habe ich mir deinen/Nepumuk's Code gleich gekrallt! Doch leider bekomme ich keine der 3 MsgBoxen zu sehen. Was mache ich da falsch?
Servus

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige