#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
в начало вашего кода, если вы хотите избежать подсказок, которые может вызвать перезапись файла