2013-08-22 2 views
0

Я нашел код на здесь, чтобы проверить, если рабочая книга открыта, но я получаюпроверки, чтобы увидеть, если рабочая книга открыта VBA, сбой, если файл открыт

Run-time Error '70': Permission Denied if the file is open. 

Я не знаете, как справиться с этой ошибкой или изменить код, чтобы справиться с этим.

Sub Sample() 
    Dim Ret 

    Ret = IsWorkBookOpen("I:\RJB\Juan's Project\Summary Sheet.xlsm") 

    If Ret = True Then 
     MsgBox "File is open" 
    Else 
     MsgBox "File is Closed" 
    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 'This line is highlighted when the crash occurs 
    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 
+1

Для интересующихся, вот оригинальный вопрос с приведенным выше кодом: http://stackoverflow.com/questions/9373082/detect-whether-excel-workbook-is-already-open-using-vba –

+0

Код зависит от этой ошибки, возникающей в первую очередь, поэтому существует строка 'On Error Resume Next': чтобы подавить это сообщение об ошибке, чтобы он мог проверить, что такое ErrNo позже. Вы вообще изменили код? – tigeravatar

+0

Я так не думаю, что код, который я использую, выше, я только изменил имя файла на проект I: \ RJB \ Juan's \ Summary Sheet.xlsm. –

ответ

2

Это было первоначально комментарий, который был найден, чтобы быть правильным решением на этот вопрос, поэтому я добавляю его в качестве ответа:

Может быть вариант в вашем редакторе VBA. Откройте редактор VBA и перейдите в Инструменты -> Параметры -> Общие -> и в разделе «Ловушка ошибок» выберите «Перерыв по необработанным ошибкам» -> OK. Возможно, у вас установлено значение «Перерыв во всех ошибках».

Смежные вопросы