Остановить ms Access VBA, открывающий файл Excel только для чтения

#excel #vba #ms-access #com

#excel #vba #ms-access #com

Вопрос:

У меня есть файл Access, в котором используются таблицы, связанные с файлом Excel, который сам по себе имеет другие ссылки, которые нуждаются в обновлении.
(Пожалуйста, пожалуйста, не подвергайте сомнению логику этого, это обходной путь для некоторых сложных проблем и действительно единственный способ сделать это на данный момент, потому что access не может использовать соединения .odc)
У меня есть кнопка в форме доступа, которая должна обновлять данные. Однако, когда button_onclick вложенный файл открывает Excel, он всегда открывает его как доступный только для чтения и, следовательно, прерывается при попытке сохранить файл. Как мне предотвратить это?

Я уже пробовал AppExcel.AlertBeforeOverwrite = False и вводил ReadOnly параметр как false Workbook.Open , но это все равно происходит.

Код выглядит следующим образом;

 Private Sub btnUpdate_Click()
Dim AppExcel As Excel.Application
Dim wbConn As Excel.Workbook

Set AppExcel = CreateObject("Excel.Application")
AppExcel.Visible = True
Set wbConn = AppExcel.Workbooks.Open("Z:Company RecordsSystem FilesConnection Data.xlsx", True, False) 'Note that last parameter, Readonly = False
With wbConn
    .RefreshAll
    'Debug.Assert False
    AppExcel.AlertBeforeOverwriting = False 'This doesn't work
    .Save 'BREAKS HERE - message boxes in Excel because the file is Read-only
    .Close
End With
Set wbConn = Nothing
Set AppExcel = Nothing

End Sub
 

Комментарии:

1. Вы пробовали использовать AppExcel.Workbooks.Add вместо этого? Он создает новую книгу, используя книгу, которую вы обычно открываете. Однако предполагается, что вам не нужно, чтобы имя файла было одинаковым.

Ответ №1:

Попробуйте добавить IgnoreReadOnlyRecommended:=True

 Set wbConn = AppExcel.Workbooks.Open("YourFilePath", True, False, IgnoreReadOnlyRecommended:=True)
 

Если это не сработает, попробуйте напрямую:

 Set wbConn = AppExcel.Workbooks.Open("YourFilePath", True, IgnoreReadOnlyRecommended:=True)
 

Другим дополнительным решением было бы всегда .SaveAs использовать файл вместо использования .Save , для которого вы могли бы изменить имя вашего файла или использовать ConflictResolution для перезаписи существующего файла

 .SaveAs Filename:="YourFilePath", ConflictResolution:=Excel.XlSaveConflictResolution.xlLocalSessionChanges 
 

Я предлагаю вам добавить AppExcel.DisplayAlerts = False в начало вашего кода, если вы хотите избежать подсказок, которые может вызвать перезапись файла