2016-02-19 8 views
2

Я пытаюсь запустить код, который будет замещать все файлы excel в папке. Во-первых, вот код:Почему я получаю несуществующее имя файла?

Dim FileSystem As Object 
Dim HostFolder As String 
Dim StringA As String 
Dim StringB As String 

Sub Init() 
    Application.DisplayAlerts = False 

    HostFolder = "\\Pc-dell\d\Documentos\LSM2\CLIENTES\SRB CDT 2 PROGRESSO2\" 

    Set FileSystem = CreateObject("Scripting.FileSystemObject") 
    DoFolder FileSystem.GetFolder(HostFolder) 

    Application.DisplayAlerts = True 
End Sub 

Sub DoFolder(Folder) 
    Dim SubFolder 

    For Each SubFolder In Folder.SubFolders 
     DoFolder SubFolder 
    Next 

    Dim File 

    For Each File In Folder.Files 

     If Right(File.Name, 4) = ".xls" Or Right(File.Name, 5) = ".xlsx" Then 

      With Workbooks.Open(File, False) 


       Dim ws As Worksheet 
       For Each ws In ActiveWorkbook.Worksheets 

        SwapStringsInActiveWorkbook "l1", "l2", ws 
        SwapStringsInActiveWorkbook "L1", "L2", ws 
        SwapStringsInActiveWorkbook "l 1", "l 2", ws 
        SwapStringsInActiveWorkbook "L 1", "L 2", ws 
        SwapStringsInActiveWorkbook "loja1", "loja2", ws 
        SwapStringsInActiveWorkbook "LOJA1", "LOJA2", ws 
        SwapStringsInActiveWorkbook "loja 1", "loja 2", ws 
        SwapStringsInActiveWorkbook "LOJA 1", "LOJA 2", ws 
        SwapStringsInActiveWorkbook "Loja1", "Loja2", ws 
        SwapStringsInActiveWorkbook "Loja 1", "Loja 2", ws 
        SwapStringsInActiveWorkbook "LOJA1", "LOJA2", ws 
        SwapStringsInActiveWorkbook "LOJA 1", "LOJA 2", ws 

       Next ws 

      End With 

      ActiveWorkbook.Save 
      ActiveWorkbook.Close 

     End If 
Continue: 
    Next 
End Sub 

Sub SwapStringsInActiveWorkbook(StringA As String, StringB As String, ws As Worksheet) 

    On Error Resume Next 
    ws.Cells.SpecialCells(xlCellTypeConstants).Replace What:=StringA, Replacement:="_AUXTEMPREPL_", LookAt:=xlPart, SearchOrder _ 
     :=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=False 

    On Error Resume Next 
    ws.Cells.SpecialCells(xlCellTypeConstants).Replace What:=StringB, Replacement:=StringA, LookAt:=xlPart, SearchOrder _ 
     :=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=False 

    On Error Resume Next 
    ws.Cells.SpecialCells(xlCellTypeConstants).Replace What:="_AUXTEMPREPL_", Replacement:=StringB, LookAt:=xlPart, SearchOrder _ 
     :=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=False 

    On Error GoTo 0 
End Sub 

Но в определенный момент, после нескольких замен, он дает мне ошибку, говоря, что он не может открыть файл:

«Excel не может открыть файл '~ $ PLAN COMPARAT de CUSTOS Rancho Bom Loja2-2015.xlsx', потому что формат файла или расширение файла недействительны. Проверьте, не поврежден ли файл и если расширение соответствует формату файла. " (это перевод с сообщения об ошибке, который был на португальском языке, извините, я не мог изменить язык)

Дело в том, что я сделал поиск в этой папке, и такого файла нет. Существует файл под названием «PLAN COMPARAT de CUSTOS RB-L2-2015.xlsx», хотя это аббревиатура. Может быть, файл, который он пытается открыть, и старый файл, который больше не существует?

У меня также был скрипт для замены в файлах слов, а также попытка открыть некоторые файлы, которые не существуют, или попытаться открыть файл с именем «~ $» плюс имя файл, который существует. Откуда это «~ $»?

Мне нужны некоторые подсказки.

+1

Что такое ".xlsl"? Я бы ожидал ".xlsx"/". Xlsxm"/". Xls". –

+0

'.xlsl' - это заблокированная версия файла. скорее всего, файл был сохранен, когда Excel в какой-то момент разбился и он скрыт в диске. Если вы выберете вариант отображения скрытых файлов в Internet Explorer, вы увидите его. Вы можете сделать проверку, которую я считаю проверкой на скрытые файлы (или, по крайней мере, проверить на '~ $' или '.xlsl' в имени файла, и если это там пропустить (или даже удалить его). –

+1

@ Grade'Eh'Bacon - см. Мой комментарий о '.xlsl' –

ответ

1

Я предлагаю это только до тех пор, пока вы не найдете/не удалите файлы злоумышленника. Заменить:

If Right(File.Name, 4) = ".xls" Or Right(File.Name, 5) = ".xlsx" Then 

с:

If Left(File.Name, 2) <> "~$" And (Right(File.Name, 4) = ".xls" Or Right(File.Name, 5) = ".xlsx") Then 

это должно быть только временным обходным.

+0

Хорошо. Спасибо. Я тестировал его, и он работает сейчас. Я не понимал, почему это временная работа. –

+1

@ FelipeMüller Несмотря на то, что решение проблемы поможет решить вашу проблему, использование этой функции скроет основную проблему ............, если вам все равно, о существовании нежелательных файлов, тогда используйте ее ................ если вы хотите удалить мусор, было бы легко написать новый суб, чтобы найти все нежелательные файлы во всех подпапках. –

+0

oh ok, я действительно не знал, что они были ненужными файлами. Я думал, что они нужны для чего-то. –

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