2012-05-03 14 views
5

Oto pseudokod za co mam nadzieję zrobić:Plik tekstowy w VBA: Open/Znajdź Wymień/SaveAs/Close File

Open text File 

Find "XXXXX" and Replace with "YYYY" 

Save text File As 

Close text file 

To, co mam tak daleko

Private Sub CommandButton1_Click() 

Dim sBuf As String 
Dim sTemp As String 
Dim iFileNum As Integer 
Dim sFileName As String 

' Edit as needed 
sFileName = "C:\filelocation" 

iFileNum = FreeFile 
Open sFileName For Input As iFileNum 

Do Until EOF(iFileNum) 
Line Input #iFileNum, sBuf 
sTemp = sTemp & sBuf & vbCrLf 
Loop 
Close iFileNum 

sTemp = Replace(sTemp, "DIM A", "1.75") 
sTemp = Replace(sTemp, "DIM B", "2.00") 
sTemp = Replace(sTemp, "DIM C", "3.00") 
sTemp = Replace(sTemp, "DIM D", "4.00") 

'Save txt file as (if possible) 

iFileNum = FreeFile 
Open sFileName For Output As iFileNum 

Print #iFileNum, sTemp 

Close iFileNum 

'Close Userform 
Unload UserForm1 

End Sub 

Ale zamiast nadpisywać oryginalny plik tekstowy, chcę "zapisać jako" do nowego pliku.

Odpowiedz

5

Wystarczy dodać ten wiersz

sFileName = "C:\someotherfilelocation" 

tuż przed tym wierszu

Open sFileName For Output As iFileNum 

Chodzi o to, aby otworzyć i zapisać do innego pliku niż ten można przeczytać wcześniej (C:\filelocation).

Jeśli chcesz uzyskać fantazyjne i pokazać prawdziwy „Zapisz jako” okna dialogowego, można to zrobić w zamian:

sFileName = Application.GetSaveAsFilename() 
8

Dlaczego warto włączyć Notatnik?

Sub ReplaceStringInFile() 

Dim sBuf As String 
Dim sTemp As String 
Dim iFileNum As Integer 
Dim sFileName As String 

' Edit as needed 
sFileName = "C:\Temp\test.txt" 

iFileNum = FreeFile 
Open sFileName For Input As iFileNum 

Do Until EOF(iFileNum) 
    Line Input #iFileNum, sBuf 
    sTemp = sTemp & sBuf & vbCrLf 
Loop 
Close iFileNum 

sTemp = Replace(sTemp, "THIS", "THAT") 

iFileNum = FreeFile 
Open sFileName For Output As iFileNum 
Print #iFileNum, sTemp 
Close iFileNum 

End Sub 
+0

Czy mogę mimo to zapisać jako w tym kodzie? –

+0

Czym ten kod różni się od kodu w pytaniu ?! –

+2

Teraz, gdy OP skopiował/wkleił go do * wersji edytowanej * pierwotnego pytania ... wcale. ;-) Dziękujemy za dodanie poprawki Save As (do innej nazwy pliku). –

-1

Kod ten będzie otwierać i czytać wiersze kompletnego pliku tekstowego zmienna „ReadedData "Trzyma linię tekstu w pamięci

Open "C:\satheesh\myfile\Hello.txt" For Input As #1 

do until EOF(1) 

     Input #1, ReadedData 
loop** 
+0

To nie rozwiązuje problemu. – Smandoli

3

Chyba jestem zbyt późno ...

Natknąłem się na ten sam problem dzisiaj; tu jest moje rozwiązanie wykorzystujące FileSystemObject:

Dim objFSO 
Const ForReading = 1 
Const ForWriting = 2 
Dim objTS 'define a TextStream object 
Dim strContents As String 
Dim fileSpec As String 

fileSpec = "C:\Temp\test.txt" 
Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objTS = objFSO.OpenTextFile(fileSpec, ForReading) 
strContents = objTS.ReadAll 
strContents = Replace(strContents, "XXXXX", "YYYY") 
objTS.Close 

Set objTS = objFSO.OpenTextFile(fileSpec, ForWriting) 
objTS.Write strContents 
objTS.Close 
0

miałem ten sam problem i przyszedł acrosse tej stronie.

rozwiązanie wystarczy ustawić kolejny „filename” w

... dla wyjścia jak ... Polecenie było bardzo proste i użyteczne.

dodatkowo (poza() Dialog Application.GetSaveAsFilename)

to jest bardzo proste, aby ustawić nową nazwę ** ** tylko przy użyciu

zastąpić polecenie, więc może zmienić nazwę pliku/rozszerzenie

np. (Począwszy od pierwszego postu)

sFileName = "C:\filelocation" 
iFileNum = FreeFile 

Open sFileName For Input As iFileNum 
content = (...edit the content) 

Close iFileNum 

teraz wystarczy ustawić:

NowaNazwaPliku = replace (sFilename, ".txt",”.CSV ") zmienić rozszerzenie

lub

NowaNazwaPliku = replace (sFilename,". ", "_edit"). dla differrent pliku

a następnie tak jak wcześniej

iFileNum = FreeFile 
Open newFileName For Output As iFileNum 

Print #iFileNum, content 
Close iFileNum 

I nadmiar ponad godzinę, aby dowiedzieć się, jak zmienić nazwę pliku tekstowego,

z wieloma różnymi rozwiązaniami, ale może być tak łatwo :)