我正在尝试在VBA中使用SQL来更新Excel中现有表中的数据(与vba代码相同的文件)。这是用SQL查询和更新编写的,目的是在推出后不久将源数据移动到数据库,但是现在还有原因。我不断收到错误“操作必须使用可更新的查询。”某些来源在扩展属性中显示ReadOnly而有些不显示;都试过了。 StatusData 是Excel文件中的命名范围。使用以下连接字符串使用命名范围的SELECT语句正常工作:
DBFullName = ThisWorkbook.Path& “\”& ThisWorkbook.Name
Cnct =“Provider = Microsoft.ACE.OLEDB.12.0; Data Source ='”& DBFullName& “”;“ &安培; _ “扩展属性='Excel 12.0; HDR =是; IMEX = 1';”
查询连接的更改包括使用“Excel 12.0宏”扩展属性和ReadOnly = 0,这些属性已逐步增加。破碎的代码如下:
Cnct = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & DBFullName & "';" & _
"Extended Properties='Excel 12.0 Macro;ReadOnly=0;HDR=Yes;IMEX=1';"
Set Cn = New ADODB.Connection
Cn.Open ConnectionString:=Cnct
strSQL = "UPDATE StatusData SET Notes='ttt' WHERE [Program Category]='something' AND [Program Name]='something' AND [LN]='1' AND [SN]='101';"
Cn.Execute strSQL, RecordsAffected, adExecuteNoRecords
答案 0 :(得分:0)
我在使用IMEX时遇到了问题,所以最后我为此目的停止使用它,这个连接字符串从未给我带来使用ADO / ACE连接回工作簿的问题(通常用于SQL GroupBy),但你可能会在建立连接之前需要对数据进行一些调整(我将整个表放入一个数组并循环,然后根据需要进行更改,然后转储回到工作表),这很简单,因为它已经在同一个工作簿中了:
Dim conn As Object
Dim sPath As String
sPath = "C:\offlinestorage\temp1.xlsx"
Set conn = CreateObject("ADODB.Connection")
With conn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.ConnectionString = Format("Data Source=" & sPath & ";Extended Properties='Excel 12.0 XML;HDR=Yes';")
.Open
End With