Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Microsoft Office (Word, Excel, Outlook и т.д.) (http://forum.oszone.net/forumdisplay.php?f=115)
-   -   Excel 2010. Макрос. Подавить сообщение при открытии файла, если его нет (http://forum.oszone.net/showthread.php?t=246947)

megaloman 14-11-2012 18:24 2025633

Excel 2010. Макрос. Подавить сообщение при открытии файла, если его нет
 
Excel 2003. Фрагмент макроса.
Код:

        On Error Resume Next
        Workbooks.Open Filename:=File_Name
       
        If Err.Number = 0 Then
            ..........
        End If

Прекрасно работает. При отсутствии файла не выдаёт никаких сообщений.

В Excel 2010 если файла нет, выдаётся сообщение, в принципе, оно позволяет продолжить выполнение макроса, и Err.Number <> 0, (If отрабатывает правильно) но это напрягает, особенно если грузится вподряд много файлов.
Как решение, сделал предварительную проверку на существование файла, то есть перед On Error вставил еще один If.
А нельзя ли обойтись без этого, какой параметр для Open необходимо указывать чтобы подавить сообщение?

Iska 15-11-2012 14:19 2026061

Цитата:

Цитата megaloman
Как решение, сделал предварительную проверку на существование файла, то есть перед On Error вставил еще один If. »

Просто используйте метод «.FileExists()» объекта автоматизации «Scripting.FileSystemObject» (хорошо известному по WSH), независимо от того, как Вы его будете создавать — ранним, або поздним связыванием. Никакие On Error при этом вовсе не нужны.

megaloman 15-11-2012 22:06 2026448

Цитата:

Как решение, сделал предварительную проверку на существование файла
-сделал именно так, как Вы предложили. Но именно этого не хочется делать - куча таблиц с макросами, которые что-то собирают из разных файлов, которые не всегда пришли на момент обработки, хотелось обойтись самым минимумом доработки. В VBS, кстати, Open с On Error отрабатывает как мне надо. ИМХО, наличие файла не гарантирует, что он нормально откроется, on error всё равно нужен.

Iska 15-11-2012 23:30 2026514

megaloman, почему не хочется? Если не использовать раннее связывание — «Dim objFSO As New Scripting.FileSystemObject», с созданием в каждом проекте ссылки на библиотеку, — можно обойтись всего семью строчками:
Код:

Dim objFSO As Object

Set objFSO = CreateObject("Scripting.FileSystemObject")



If objFSO.FileExists(strFile) Then
    …
Else
    Msgox "Not found [" & strFile & "]"
End If

Set objFSO = Nothing

Цитата:

Цитата megaloman
ИМХО, наличие файла не гарантирует, что он нормально откроется, on error всё равно нужен. »

Что значит «нормально»?

megaloman 16-11-2012 00:44 2026557

Подпорченный файл эксел нормально не откроет
В принципе, во мне говорит консерватизм - подайте мне то, что было, и раздражение - нет полной совместимости на совершенно ровном месте. Вообще хватает замены
If Err.Number = 0 Then
на
If FSO.FileExists and Err.Number = 0 (или без err.number), так как FSO я всё равно использую для перемещения обработанных файлов

Iska 16-11-2012 02:05 2026590

Цитата:

Цитата megaloman
Подпорченный файл эксел нормально не откроет »

Как такое получается? На моей памяти такого было, ну, пару раз.


Время: 11:13.

Время: 11:13.
© OSzone.net 2001-