workbooks.close не работает для меня - PullRequest
0 голосов
/ 25 апреля 2018

Надеюсь, что кто-то может помочь с моей следующей проблемой.

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

Private Sub Command1_Click() workbooks("workbookname.XLSM").close Savechanges = False End Sub

я тоже пробовал

workbooks("workbookname.Xlsm").close

Оба я запускаю отдельно, и оба дают мне код ошибки 9.

Конкретный файл всегда будет на рабочем столе пользователя.

Я подумал, что это может иметь отношение к моим ссылкам, поэтому я проверил и включил следующие ссылки. (некоторые по другим конкретным причинам).

  • Visual Basic для приложений
  • Библиотека объектов Microsoft Access 16.0
  • OLE Automation
  • Библиотека объектов Microsoft DAO 3.6
  • Microsoft Excel 16.0
  • Библиотека объектов Microsoft Scripting Runtime.

Действительно надеюсь, что кто-то может мне помочь с этим. Я просматривал довольно много форумов, но нигде не мог найти ту же проблему или решение.

w.k.r. Драк.

1 Ответ

0 голосов
/ 25 апреля 2018

Вы должны проверить, открыт ли он, и правильно сослаться на открытый объект.Приведенная ниже функция (которую я где-то взял с SO) возвращает значение true / false для файла, в частности:

Вы бы использовали его следующим образом:

Private Sub Command1_Click()
Dim xls As Object

If IsWorkBookOpen("C:/Users/Desktop/Workbook.xlsm") = True Then
    Set xls = GetObject("C:/Users/Desktop/Workbook.xlsm")
    xls.Close True
Else
    'do stuff if 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
    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
...