Я думаю, у вас в основном правильный подход. Я бы также использовал перехват ошибок, чтобы определить, есть ли у пользователя доступ к файлу. Тем не менее, я согласен, что неспецифическое сообщение об ошибке не очень полезно.
Это отобразит специфичное для VBA сообщение об ошибке (даже если номер ошибки не изменился):
MsgBox Err.Description
Если вы хотите определить причину ошибки и использовать ее, например, чтобы отобразить собственное сообщение, вы можете сделать что-то вроде этого:
If InStr(Err.Description, "could not be found") <> 0 Then
MsgBox "The file isn't where you said it was."
ElseIf InStr(Err.Description, "access") <> 0 Then
MsgBox "U can't touch this."
Else
' etc.
End If
Хотя лучше проверить вещи самостоятельно, чем полагаться на Err.Description
, если это возможно. Можно проверить, существует ли файл напрямую, например, так:
If Dir(filename) = "" Then ' Nicer than vba.len(vba.dir(filename,vbnormal))=0
MsgBox "The file isn't where you said it was."
End If
Я не знаю эквивалентной функции для проверки доступа пользователя, поэтому я бы остановился на просмотре содержимого Err.Description
.