Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/игнорирование ошибки 1004 в итеративном макросе - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
игнорирование ошибки 1004 в итеративном макросе
Kimezz Дата: Вторник, 25.09.2018, 13:10 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
коллеги, добрый день,

столкнулся с проблемой, гугл не очень помог, надеюсь на вас.

задача: на сайте публикуются данные раз в день в экселе, при этом нормального доступа ко всей базе данных нет.
решил выкачать все файлы и слить воедино. первый шаг - выкачать файлы, которые называются однотипно. выходные дни игнорирую на уровне алгоритма, но праздничные и иные исключения так не обойти - идёт ссылка на несуществующий файл. понапихал в текст кода On Error Goto и т.п. - не сработало.

код ниже, документ - в приложении.

[vba]
Код

Sub test()

Dim address, name As String
Dim count, c_max, i As Integer

On Error GoTo EndIteration

Application.ScreenUpdating = False
Application.DisplayAlerts = False

count = 0
c_max = Range("max_count").Value

For i = 0 To c_max

    Range("count").Value = count

    address = Range("D_address").Value
    name = Range("F_name").Value

    Workbooks.Open Filename:=address

        ActiveWindow.Visible = True
        ActiveWorkbook.SaveAs Filename:= _
            "C:\Users\GalachyanKG\Desktop\Проекты\Diesel\" & name, _
            FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False
        ActiveWindow.Close
        
EndIteration:

count = count + 1
Range("count").Value = count

If Range("w_day").Value = 6 Then
    count = count + 2
    c_max = c_max - 2
End If

If i >= c_max Then Exit For
    
Next i

Range("count").Value = 0

Application.DisplayAlerts = True
Application.ScreenUpdating = True

End Sub
[/vba]

собственно, нужно, чтобы при обращении к несуществующей странице код игнорировал ошибку и, увеличив счетчик, переходил к следующей дате (дата, и вслед за ней адрес ссылки, меняется в экселе при изменении значения счетчика).

спасибо!
К сообщению приложен файл: Book2.xlsm (19.6 Kb)


Сообщение отредактировал Kimezz - Вторник, 25.09.2018, 13:48
 
Ответить
Сообщениеколлеги, добрый день,

столкнулся с проблемой, гугл не очень помог, надеюсь на вас.

задача: на сайте публикуются данные раз в день в экселе, при этом нормального доступа ко всей базе данных нет.
решил выкачать все файлы и слить воедино. первый шаг - выкачать файлы, которые называются однотипно. выходные дни игнорирую на уровне алгоритма, но праздничные и иные исключения так не обойти - идёт ссылка на несуществующий файл. понапихал в текст кода On Error Goto и т.п. - не сработало.

код ниже, документ - в приложении.

[vba]
Код

Sub test()

Dim address, name As String
Dim count, c_max, i As Integer

On Error GoTo EndIteration

Application.ScreenUpdating = False
Application.DisplayAlerts = False

count = 0
c_max = Range("max_count").Value

For i = 0 To c_max

    Range("count").Value = count

    address = Range("D_address").Value
    name = Range("F_name").Value

    Workbooks.Open Filename:=address

        ActiveWindow.Visible = True
        ActiveWorkbook.SaveAs Filename:= _
            "C:\Users\GalachyanKG\Desktop\Проекты\Diesel\" & name, _
            FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False
        ActiveWindow.Close
        
EndIteration:

count = count + 1
Range("count").Value = count

If Range("w_day").Value = 6 Then
    count = count + 2
    c_max = c_max - 2
End If

If i >= c_max Then Exit For
    
Next i

Range("count").Value = 0

Application.DisplayAlerts = True
Application.ScreenUpdating = True

End Sub
[/vba]

собственно, нужно, чтобы при обращении к несуществующей странице код игнорировал ошибку и, увеличив счетчик, переходил к следующей дате (дата, и вслед за ней адрес ссылки, меняется в экселе при изменении значения счетчика).

спасибо!

Автор - Kimezz
Дата добавления - 25.09.2018 в 13:10
_Boroda_ Дата: Вторник, 25.09.2018, 14:05 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Проверяйте файл на наличие так
[vba]
Код
if dir(ПолныйПутьСИменемИРасширением)<>"" then
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеПроверяйте файл на наличие так
[vba]
Код
if dir(ПолныйПутьСИменемИРасширением)<>"" then
[/vba]

Автор - _Boroda_
Дата добавления - 25.09.2018 в 14:05
Kimezz Дата: Вторник, 25.09.2018, 14:21 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
_Boroda_, спасибо. к сожалению, не сработало: воткнул [vba]
Код
If Dir(address) <> "" Then
[/vba] перед исполнением - он не понимает адрес в интернете как путь к файлу, пишет "bad file name or number".
 
Ответить
Сообщение_Boroda_, спасибо. к сожалению, не сработало: воткнул [vba]
Код
If Dir(address) <> "" Then
[/vba] перед исполнением - он не понимает адрес в интернете как путь к файлу, пишет "bad file name or number".

Автор - Kimezz
Дата добавления - 25.09.2018 в 14:21
sboy Дата: Вторник, 25.09.2018, 14:50 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
Добрый день.
Вот так попробуйте
[vba]
Код
        On Error Resume Next
    Workbooks.Open Filename:=address
    If Err Then
        Err.Clear
        On Error GoTo 0
        Else
            ActiveWindow.Visible = True
            ActiveWorkbook.SaveAs Filename:= _
                "C:\Users\GalachyanKG\Desktop\Проекты\Diesel\" & name, _
                FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
            ReadOnlyRecommended:=False, CreateBackup:=False
            ActiveWindow.Close
    End If
[/vba]
upd. поправил, перевложил
К сообщению приложен файл: Book2-1-.xlsm (16.2 Kb)


Яндекс: 410016850021169

Сообщение отредактировал sboy - Вторник, 25.09.2018, 14:52
 
Ответить
СообщениеДобрый день.
Вот так попробуйте
[vba]
Код
        On Error Resume Next
    Workbooks.Open Filename:=address
    If Err Then
        Err.Clear
        On Error GoTo 0
        Else
            ActiveWindow.Visible = True
            ActiveWorkbook.SaveAs Filename:= _
                "C:\Users\GalachyanKG\Desktop\Проекты\Diesel\" & name, _
                FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
            ReadOnlyRecommended:=False, CreateBackup:=False
            ActiveWindow.Close
    End If
[/vba]
upd. поправил, перевложил

Автор - sboy
Дата добавления - 25.09.2018 в 14:50
Kimezz Дата: Вторник, 25.09.2018, 15:15 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
sboy, большое спасибо, теперь работает корректно, возьму прием на вооружение.

вопрос исчерпан, тему можно закрывать.
 
Ответить
Сообщениеsboy, большое спасибо, теперь работает корректно, возьму прием на вооружение.

вопрос исчерпан, тему можно закрывать.

Автор - Kimezz
Дата добавления - 25.09.2018 в 15:15
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2026 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!