2013-02-12 4 views
2

Мне нужна помощь в создании поиска и замены строкового макроса, чтобы он мог найти и заменить строку во всех файлах в папке.Найти и заменить строку во всех файлах excel в папке

Например fofler = "C:\ifolder\" список файлов = "*.xlsx"

до сих пор я могу сделать это только для одного файла, мне нужно сделать это для всех файлов в папке

Sub ReplaceStringInFile() 

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

' Edit as needed 
sFileName = "C:\macro\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 
+2

пожалуйста, покажите, что вы пробовали и где вы застряли – scott

+1

Сама же беда заставила меня выучить VBA 4 месяцев назад от завершения нулевого уровня))) –

+1

Вы можете помочь получить ответ, предоставив более подробную информацию - с какими именно проблемами вы сталкиваетесь? Вы вообще знаете какой-либо VBA? Вам нужно знать, как зацикливать файлы в папке? Открыть книгу? –

ответ

3

Как вам на самом деле есть код, который открывает текстовые файлы - не файлы Excel - я придерживался того же подхода

Что-то вроде этого, где

  1. Dir предназначенный для копирования всех файлов в определенном каталоге.
  2. Используйте файл FileScriptingObject для чтения всего текста сразу, внесите замену, а затем запишите файл с обновленным текстом.

код

Sub ReplaceStringInFile() 

Dim objFSO As Object 
Dim objFil As Object 
Dim objFil2 As Object 
Dim StrFileName As String 
Dim StrFolder As String 
Dim SstrAll As String 

Set objFSO = CreateObject("scripting.filesystemobject") 
StrFolder = "c:\macro\" 
StrFileName = Dir(StrFolder & "*.txt") 

Do While StrFileName <> vbNullString 
    Set objFil = objFSO.opentextfile(StrFolder & StrFileName) 
    strAll = objFil.readall 
    objFil.Close 
    Set objFil2 = objFSO.createtextfile(StrFolder & StrFileName) 
    objFil2.Write Replace(strAll, "THIS", "THAT") 
    objFil2.Close 
    StrFileName = Dir 
Loop 
End Sub 
+0

Большое спасибо за код. Как, я новичок в VBA, можете ли вы помочь мне, где вставить этот код и запустить. Я попробовал это, вставив в VBAProject-> ThisWorkBook. Он не показывает никаких ошибок во время работы, но в то же время не заменяет, то есть не работает. Вы можете помочь. –

+1

@guaravkumar поместите его в обычный модуль кода. Убедитесь, что ваше имя пути обновлено (от C; \ macro \ выше). – brettdj

+0

Большое спасибо за помощь. Я делаю это для файлов excel. Я думаю, что это причина ошибки: введите конец файла (Ошибка 62). Можете ли вы, пожалуйста, помочь мне в написании подписчика на opentextfile и createtextfile, которые используются в программе. Большое спасибо в ожидании :) –

Смежные вопросы