Страницы: 1
RSS
Помогите составить обработчик ошибки при открытии файла
 
Здравствуйте! Передо мной стоит задача открыть файлы и перечислить список файлов  excel  в папке. Без знаний VBA  с помощью интернета составила макрос, он работает, переписывает названия файлов в папке, но если натыкается на файл, который выдает ошибку при открытии, он прекращает работу. Ошибка - например:
"В книге обнаружено содержимое, которое не удалось прочитать. попробовать восстановить содержимое книги?"

Помогите пожалуйста дописать код так, чтобы при открытии файла с ошибкой, макрос переходил к следующему файлу.

r = Range("A65536").End(xlUp).Row + 1 'íàõîäèì ïåðâóþ ïóñòóþ ñòðîêó

For Each FileItem In SourceFolder.Files

If FileItem.Name Like "*" & ".xls" & "*" Then
Workbooks.Open FileItem.Path, UpdateLinks:=0
ЭтаКнига.Activate    
Cells(r, 1).Formula = FileItem.Name
Cells(r, 2).Formula = FileItem.Path
Workbooks.Item(FileItem.Name).Activate
r = r + 1
ActiveWorkbook.Close SaveChanges:=False
End If

X = SourceFolder.Path
Next FileItem
 
А зачем открывать книгу???  :o
Посмотрите здесь.
Изменено: Johny - 18.01.2013 12:11:08
There is no knowledge that is not power
 
Цитата
Ангелина Ткаченко пишет:
перечислить список файлов excel в папке.
Только для вас - http://www.planetaexcel.ru/techniques/12/45/ ... ;)
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Johny, книгу мне открывать надо, т.к. в дальнейшем необходимо будет усложнить макрос и записать все связи из этой книги в отдельный лог, буду делать на основе данного макроса. Мой макрос работает (можете посмотреть приложенный файл), просто не получается обработать именно ошибку, т.е. на 500 строке он у меня перестает работать, т.к. очередной файл не открывается,и он сам не переходит к следующему.

Z, спасибо, на основании этой статьи я как раз и написала свой макрос)))) Но ошибку мою он не обрабатывает, т.к. мне нужно обязательно именно открывать каждый файл и переходить к следующему в случае ошибки открытия. В этом и касяк, что у меня не переходит(((
 
по ссылке ниже в комментариях написано, что надо добавить "On Error Resume Next"
Учимся сами и помогаем другим...
 
Может, так?
Код
If FileItem.Name Like "*" & ".xls" & "*" Then
    On Error Resume Next
    Workbooks.Open FileItem.Path, UpdateLinks:=0
    If Err = 0 Then
        ЭтаКнига.Activate
        Cells(r, 1).Formula = FileItem.Name
        Cells(r, 2).Formula = FileItem.Path
        Workbooks.Item(FileItem.Name).Activate
        r = r + 1
        ActiveWorkbook.Close SaveChanges:=False
    End If
End If
There is no knowledge that is not power
 
Цитата
ber$erk пишет:
по ссылке ниже в комментариях написано, что надо добавить "On Error Resume Next"

ааа, не дочитала! спасибо :)
 
Johny, огромнейшее Вам спасибо! Помогло, я пол дня мучалась! ура, спасибо!
 
Еще вопрос, подскажите, пожалуйста, если среди файлов которые перебирает макрос есть файл, который запрашивает пароль при открытии, как можно проигнорировать открытие данного файла и перейти к следующему?
 
Пробовала эксперементировать с Application.DisplayAlerts - не помогло...
 
Перед открытием фалов дописываете
On Error Resume Next
Далее открываем файл с Паролем =""
Workbooks.Open("D:\1.xlsx", Password:="")
После этого проверяем Код ошибки, если он не равен 1004 то выполняем нужный код

If Err <> 1004 Then
ваш код
End if
 
Сделала как вы написали, всё-равно высвечивается поле для ввода пароля и пока не введешь его, или не нажмешь отмену цикл дальше не продолжается. а т.к. у меня 16 гигабайт файлов excel я хочу поставить макрос на выолнение на ночь, чтобы не нажимать в каждом файле кнопку "Отмена". Как сделать чтобы не запрашивал файл окошко с паролем?
 
По скрину видно, что "Только для чтения" - активная кнопка. Быть может, это поможет:
Код
Application.SendKeys "{ENTER}" 'Открываем книгу в режиме чтения
' Если есть пароль, закрываем без сохранения.
If ActiveWorkbook.HasPassword Then
    ActiveWorkbook.Close False
End If
Изменено: Johny - 22.01.2013 16:36:18
There is no knowledge that is not power
 
Цитата
Johny пишет:
Application.SendKeys "{ENTER}" 'Открываем книгу в режиме чтения

Не помогло, но возможно я неверно вставила в код - вот что у меня получилось:

If FileItem.Name Like "*" & ".xls" & "*" Then
On Error Resume Next
Workbooks.Open FileItem.Path, UpdateLinks:=0, Password:=""

Application.SendKeys "{ENTER}"
If ActiveWorkbook.HasPassword Then
   ActiveWorkbook.Close False
End If

If Err <> 1004 Then
If Err = 0 Then
ЭтаКнига.Activate
 
Cells(r, 1).Formula = FileItem.Name
Cells(r, 2).Formula = FileItem.Path

Workbooks.Item(FileItem.Name).Activate

r = r + 1

ActiveWorkbook.Close SaveChanges:=False

End If
End If
End If
 
Вот вам пример.
Разархивируйте, откройте файл м1, нажмите на кнопку, выбирите файлы File1 и File 2, и нажмите открыть.
Окна с предложением ввести пароль не появляется.

PS пароль на второй файл 1.
 
Да, спасибо большое, получилось. Я писала Password = "", а у вас WriteResPassword:=""
Когда указала такое условие, тоже не запросило пароль! Спасибо!
 
Если бы сразу скрин показали, предложил бы вариант с паролем на изменение :)
 
Наткнулась на еще одну проблему, никак не могу обойти((((((((((((( Помогите, пожалуйста.
Среди моих документов на сервере, в которых мне необходимо сделать обход макросом ( более 16000 документов excel) находятся документы, при встрече с которыми макрос останавливается). Например так у меня случилось с документом "Обснование выбора по техники 2011г%D0[1].xls". При встрече с ним макрос останавливается и дальше не идет. Понимаю, что ошибка из-за имени файла и нормальные люди так файлы не называют ( при переименовании все начинает работать), но таких документов не один на сервере, поэтому переименовать все не получится(((

Уже куда только не пыталась вставить обработчик ошибок - картина та же. Я очень плохо знаю VBA, а написать этот макрос мне очень нужно. Прошу очень помочь знатоков.

Вот мой код (может где-то увидете ошибку, куда можно дописать обработчик).

For Each FileItem In SourceFolder.Files
On Error Resume Next
If FileItem.Name Like "*" & ".xls" & "*" Then
On Error Resume Next
Workbooks.Open FileItem.Path, UpdateLinks:=0, WriteResPassword:=""

If Err <> 1004 Then
If Err = 0 Then

ЭтаКнига.Activate
   
Cells(r, 1).Formula = FileItem.Name
Cells(r, 2).Formula = FileItem.Path

Workbooks.Item(FileItem.Name).Activate

r = r + 1

ActiveWorkbook.Close SaveChanges:=False


End If

End If

End If

X = SourceFolder.Path

Next FileItem

Также прилагаю архив, в нем 2 папки. В одной рабочие файлы, в другой вышеописанный косячный файл для теста. Макрос должен открывать каждый файл из папки, записывать его имя на лист (как бы вести лог) и закрывать. Папка выбирается в файле с макросом. Помогите, пожалуйста разобраться где не хватает обработчика ошибок(
 
Попробуйте так
Код
On Error Resume Next
For Each FileItem In SourceFolder.Files
If FileItem.Name Like "*" & ".xls" & "*" Then
    Workbooks.Open FileItem.Path, UpdateLinks:=0, WriteResPassword:=""
    Set Opened_File = ActiveWorkbook
    If Err <> 1004 Then
        If Err = 0 Then
            ЭтаКнига.Activate
            Cells(r, 1).Formula = FileItem.Name
            Cells(r, 2).Formula = FileItem.Path
            Opened_File.Activate
            r = r + 1
            Opened_File.Close SaveChanges:=False
        End If
    End If
End If
 
Цитата
Ангелина Ткаченко пишет:
Помогите, пожалуйста разобраться где не хватает обработчика ошибок

Глюков (ошибок) не обнаружено. Все отрабатывает справно. Возможно, проблема связана с сетью.
 
Sergei_A, большое спасибо! Вроде помогло)
Страницы: 1
Читают тему
Наверх