Я пытаюсь обновить таблицу в файле Excel из DAO, как если бы это была таблица базы данных. Похоже, что-то, что должно быть возможно, но я не могу найти документацию об открытии Excel с DAO.
Я дошел до открытия файла и получения дескриптора набора записей, но я вижу ошибку 3027 "Не удается обновить База данных или объект только для чтения. " когда я пытаюсь добавить в набор записей. Одна из проблем заключается в том, что я могу видеть лист как таблицу, но не могу найти таблицу Excel на этом листе как объект. Возможно, я не знаю правильный синтаксис для открытия таблицы как набора записей.
Код, который я использую, задает dbOpenDynaset, как если бы вы сделали таблицу Access доступной для записи. Что я пытаюсь даже возможно?
Ошибка возникает на ".AddNew":
Const dbOpenDynaset As Long = 2
Const dbAppendOnly As Long = 8
Const dbOptimistic As Long = 3
Public Sub OpenExcelAsDB(ByVal excelFile As String)
Dim fileExtension As String
fileExtension = Right$(excelFile, Len(excelFile) - InStrRev(excelFile, "."))
Dim connectionString As String
Select Case fileExtension
Case "xls"
connectionString = "Excel 8.0;HDR=YES;IMEX=1"
Case "xlsx"
connectionString = "Excel 12.0 Xml;HDR=YES;IMEX=1"
Case "xlsb"
connectionString = "Excel 12.0;HDR=YES;IMEX=1"
Case "xlsm"
connectionString = "Excel 12.0 Macro;HDR=YES;IMEX=1"
Case Else
connectionString = "Excel 8.0;HDR=Yes;IMEX=1"
End Select
With CreateObject("DAO.DBEngine.120")
With .OpenDatabase(excelFile, False, False, connectionString)
With .OpenRecordset("LogSheet$", dbOpenDynaset, dbAppendOnly, dbOptimistic)
.AddNew
With .Fields()
.Item("errorNumber").Value = errorNumber
.Item("errorDescription").Value = errorDescription
.Item("customNote").Value = customNote
.Item("errorDate").Value = Now()
.Item("Username").Value = UserLogon
.Item("Computer").Value = ComputerName
End With
.Update
.Close
End With
.Close
End With
End With
End Sub