PDA

Показать полную графическую версию : Excel 2010. Макрос. Подавить сообщение при открытии файла, если его нет


megaloman
14-11-2012, 18:24
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
Как решение, сделал предварительную проверку на существование файла, то есть перед On Error вставил еще один If. »
Просто используйте метод «.FileExists()» объекта автоматизации «Scripting.FileSystemObject» (хорошо известному по WSH), независимо от того, как Вы его будете создавать — ранним, або поздним связыванием. Никакие On Error при этом вовсе не нужны.

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

Iska
15-11-2012, 23:30
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


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

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

Iska
16-11-2012, 02:05
Подпорченный файл эксел нормально не откроет »
Как такое получается? На моей памяти такого было, ну, пару раз.




© OSzone.net 2001-2012