zinedine
Goto Top

Suchen und ersetzen als Batch oder VBA

Hallo,

bin hier neu im Forum und ein absoluter Laie was Programmierung betrifft...
Habe deswegen auch ein großes für viele eher ein leichtes Problem:
Ich möchte für eine Excelauswertung, in einer Textdatei alle Punkte mit einem Komma ersetzen!
Sollte ich das über ein Makro machen oder über eine Batchdatei, die ich dann auch über ein Makro starten kann?

Wie könnte diese Programmierung aussehen? Für eure Hilfe bin ich sehr Dankbar...

Content-Key: 382584

Url: https://administrator.de/contentid/382584

Printed on: April 18, 2024 at 14:04 o'clock

Member: emeriks
emeriks Aug 07, 2018 at 13:35:40 (UTC)
Goto Top
Hi,
wenn das nur eine einmalige Sache ist, dann einfach die Textdatei im Notepad öffnen und Suchen-Ersetzen + Speichern.

E.
Member: SeaStorm
SeaStorm Aug 07, 2018 at 13:52:58 (UTC)
Goto Top
Hi in Powershell:
(Get-Content c:\temp\test.csv).replace('.', ',') | Set-Content c:\temp\test.csv  
Member: Zinedine
Zinedine Aug 07, 2018 at 14:08:07 (UTC)
Goto Top
Nee face-smile sollen tägliche auswertungen werden...
Member: Zinedine
Zinedine Aug 08, 2018 at 06:10:38 (UTC)
Goto Top
klappt als Powershell sehr gut damit. Wenn ich das aber über ein Makro abspielen möchte funktioniert es leider nicht. Hast du eine Ahnung wieso ? face-smile

Sub PS_ausführen()

Dim pathname As String
pathname = ActiveWorkbook.Path
Call Shell("powershell -noexit -file ""C:\Users\ds\Desktop\log_bearbeiten", 1)


End Sub
Member: SeaStorm
SeaStorm Aug 08, 2018 at 06:14:14 (UTC)
Goto Top
Morgen,

da ausser "geht nicht" keine Beschreibung vorliegt ...
Vermute ich mal ins blaue rein, das du da noch die ExecutionPolicy brauchst
Call Shell("powershell -executionpolicy bypass -noexit -file ""C:\Users\ds\Desktop\log_bearbeiten", 1)  
Member: emeriks
emeriks Aug 08, 2018 updated at 06:17:29 (UTC)
Goto Top
log_bearbeiten
Hast Du die Datei tatsächlich ohne Dateinamenerweiterung gespeichert? Bedenke, dass der Explorer standardmäßig keine bekannten Erweiterungen anzeigt.

Dann:
Du hast "" vor dem Pfad, dann also auch danach.
"powershell -noexit -file ""C:\Users\ds\Desktop\log_bearbeiten"""  

Da das aber ein Pfad ohne Leerzeichen ist, kannst Du das hier auch weglassen.
"powershell -noexit -file C:\Users\ds\Desktop\log_bearbeiten"  


Welche ExecutionPolicy gilt? ggf. versuchen mit
powershell -noexit -ExecutionPolicy Bypass -file ".......  

E.
Member: Zinedine
Zinedine Aug 08, 2018 at 06:25:38 (UTC)
Goto Top
Morgen,

sorry...
auch in dieser Form öffnet sich die Powershell und schließt auch sofort wieder, ohne das es veränderungen in der Textdatei vornimmt.
Wenn ich die PS seperat öffne, ohne Makro, brauch er auch etwas länger, aber funktioniert prima...
Member: emeriks
emeriks Aug 08, 2018 at 06:30:41 (UTC)
Goto Top
auch in dieser Form
Weil auch @SeaStorm die "" übersehen hat ...
Member: Zinedine
Zinedine Aug 08, 2018 at 06:40:48 (UTC)
Goto Top
Ich habe es so probiert:

Sub PS_ausführen()

Dim pathname As String
pathname = ActiveWorkbook.Path
Call Shell("powershell -noexit -ExecutionPolicy Bypass -file ""C:\Users\ds\Desktop\log_bearbeiten""", 1)


End Sub

Hat auch wieder nicht funktioniert...
Member: SeaStorm
SeaStorm Aug 08, 2018 at 06:53:43 (UTC)
Goto Top
da ist immernoch zu viel " im Spiel. Und benenne die Datei korrekt bitte

1. Sicher gehen das die Datei die Endung .ps1 hat und dann
2.:
Call Shell("powershell -noexit -ExecutionPolicy Bypass -file "C:\Users\ds\Desktop\log_bearbeiten.ps1", 1)  
Member: emeriks
emeriks Aug 08, 2018 at 07:11:15 (UTC)
Goto Top
da ist immernoch zu viel " im Spiel. Und benenne die Datei korrekt bitte
Nein, das war schon richtig. Deine Zeile geht so nicht. Bedenke: Es ist VBA!
Member: emeriks
emeriks Aug 08, 2018 at 07:13:25 (UTC)
Goto Top
öffnet sich die Powershell und schließt auch sofort wieder
Das verstehe ich nicht. Hast Du doch ein "-noexit" in der Kommandozeile. Hast Du doch?

Im Script hast Du aber keinen explizite Exit-Anweisung? Falls doch, nimm sie mal vorübergehend raus. Dann müsste das Fenster stehen bleiben und Du kannst ggf. sehen, wo der Schuh drückt.
Member: emeriks
Solution emeriks Aug 08, 2018 at 07:14:08 (UTC)
Goto Top
Was passiert, wenn Du einfach nur ausführst:
Call Shell("powershell -noexit", 1)  
Member: Zinedine
Zinedine Aug 08, 2018 at 07:33:57 (UTC)
Goto Top
Sub PS_ausführen()

Dim pathname As String
pathname = ActiveWorkbook.Path
Call Shell("powershell ""C:\Users\ds\Desktop\log_bearbeiten", 1)


End Sub

so hat es funktioniert. Frag mich nicht wieso face-smile
Member: SeaStorm
SeaStorm Aug 08, 2018 at 07:56:50 (UTC)
Goto Top
Zitat von @emeriks:

Bedenke: Es ist VBA!
OOps da war ja was face-smile
Member: emeriks
emeriks Aug 08, 2018 at 08:35:46 (UTC)
Goto Top
Call Shell("powershell ""C:\Users\ds\Desktop\log_bearbeiten", 1)
Ich glaube Dir kein Wort. Diese Zeile ist syntaktisch falsch.
Member: Zinedine
Zinedine Aug 08, 2018 at 08:47:53 (UTC)
Goto Top
hahaha face-smile
was soll ich dir jetzt sagen? Es funktioniert aber trotzdem...
soll ich was ändern?
Member: emeriks
emeriks Aug 08, 2018 at 08:54:18 (UTC)
Goto Top
PS wir das " vor dem Pfad irgnorieren. Aber sobald Du mal einen Pfad mit Leerzeichen drin hast, wird das nicht mehr funktionieren. Ganz einfach.
Member: colinardo
Solution colinardo Aug 08, 2018 updated at 09:41:39 (UTC)
Goto Top
Wenn Ihr schon in VBA hantiert dann macht es doch auch direkt damit face-smile.
strFile = "D:\test.txt"  
Set fso = CreateObject("Scripting.FileSystemObject")  
strContentNew = Replace(fso.OpenTextFile(strFile,1).ReadAll(),".",",",1,-1,1)  
fso.OpenTextFile(strFile,2).Write strContentNew
Grüße Uwe
Member: Zinedine
Zinedine Aug 08, 2018 at 09:45:40 (UTC)
Goto Top
das probiere ich auch mal aus...
Member: Zinedine
Zinedine Aug 08, 2018 at 09:46:46 (UTC)
Goto Top
ich weiß bescheid. Vielen Dank für deine Hilfe... bin auf jeden Fall ein großen Schritt weiter face-smile
Member: Zinedine
Zinedine Aug 08, 2018 at 10:05:44 (UTC)
Goto Top
Hi Uwe,

die Variante ist über VBA tatsächlich die bessere...
Vielen Dank an alle...