【发布时间】:2020-04-13 23:16:47
【问题描述】:
我正在尝试从 DAO 更新 Excel 文件中的表,就好像它是数据库表一样。听起来应该是可能的,但我找不到任何有关使用 DAO 打开 Excel 的文档。
我已经打开文件并获得了记录集句柄,但我看到错误 3027“无法更新。数据库或对象是只读的。”当我尝试添加到记录集时。问题的一部分是我可以将工作表视为 tabledef,但我无法在该工作表中找到作为对象的 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
【问题讨论】: