У меня была такая же проблема несколько лет назад, когда я пытался открыть сетевой файл из-за рубежа. Если кто-то уже открыл его, Excel попытался бы открыть его в течение нескольких минут, прежде чем сказать, что он используется.
Я использовал ниже код, очень похожий на код Сида здесь .
Код пытается записать в файл C; \ mywork.xls (измените ваш путь к файлу, чтобы он подходил), если есть ошибка, файл уже открыт, иначе файл открыт. Проверка ошибок происходит сразу, а не с задержкой по времени.
Sub Sample() Dim Ret Dim Wb As Workbook Dim strFile As String styrfile = "C:\myWork.xlsx" Ret = IsWorkBookOpen(strFile) If Ret = True Then MsgBox "File is open" Else Set Wb = Workbooks.Open(strFile) End If End Sub Function IsWorkBookOpen(FileName As String) Dim ff As Long, ErrNo As Long On Error Resume Next ff = FreeFile() Open FileName For Input Lock Read As #ff Close ff ErrNo = Err On Error GoTo 0 Select Case ErrNo Case 0: IsWorkBookOpen = False Case 70: IsWorkBookOpen = True Case Else: Error ErrNo End Select End Function