Показать полную графическую версию : 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 необходимо указывать чтобы подавить сообщение?
Как решение, сделал предварительную проверку на существование файла, то есть перед On Error вставил еще один If. »
Просто используйте метод «.FileExists()» объекта автоматизации «Scripting.FileSystemObject» (хорошо известному по WSH), независимо от того, как Вы его будете создавать — ранним, або поздним связыванием. Никакие On Error при этом вовсе не нужны.
megaloman
15-11-2012, 22:06
Как решение, сделал предварительную проверку на существование файла -сделал именно так, как Вы предложили. Но именно этого не хочется делать - куча таблиц с макросами, которые что-то собирают из разных файлов, которые не всегда пришли на момент обработки, хотелось обойтись самым минимумом доработки. В VBS, кстати, Open с On Error отрабатывает как мне надо. ИМХО, наличие файла не гарантирует, что он нормально откроется, on error всё равно нужен.
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 я всё равно использую для перемещения обработанных файлов
Подпорченный файл эксел нормально не откроет »
Как такое получается? На моей памяти такого было, ну, пару раз.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC