我正在尝试使用 SQL 和 VBA 来更新 Excel 工作表。 我的宏当前更新同一文件中的 5 个工作表(审阅、二手、道路、Inspec 和其他)。 该宏运行 SQL 以根据某些条件更新每个工作表。
我想要做的是在 TMP 列中放置一个“X”,并在 TMP2 列(在 MatcheLines 工作表上)中放置一个代码作为记录
'关闭前一个 SELECT 查询的连接。 SELECT 查询是第一个查询,并且运行速度很快。 它和它的性能都没有问题。
dbRS.Close
dBcn.Close
' ADD X TO TMP COLUMN and S to TMP2 column FOR REVIeW RECORDS
Do Until ActiveSheet.Name = "MatchedLines"
DoEvents
Workbooks(ThisBook).Worksheets("MatchedLines").Activate
Loop
dBcn.Open dbconn
vsql = ""
vsql = "UPDATE [MatchedLines$] M " _
& " SET M.[TMP] = 'X', [TMP2] = 'S' " _
& "WHERE M.[RO_ID] IN " _
& " (SELECT DISTINCT [RO_ID] FROM [Review$])"
dbRS.Open vsql, dBcn
当宏运行第二个查询时,它会陷入困境并冻结 Excel。 我通常这个时候使用任务管理器关闭Excel。
目的是在 MatchedLines 工作表中“标记”这些记录,以便后续查询确实选择相同的记录。
SQL 是否有问题导致 Excel 速度变慢/冻结?
有更好的方法吗? DELETE 查询会更好并从 MatchedLines 工作表中删除这些记录吗?
预先感谢您的任何建议或建议。 仅供参考......我很少使用 SQL,所以我不确定是什么导致了我的问题。
再次感谢...
以简单的方式制作。
Dim cnx As New ADODB.Connection
Dim CONSTR As String
CONSTR = "Provider = Microsoft.ACE.OLEDB.12.0; Data Source=" & ThisWorkbook.FullName & "; Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
cnx.ConnectionString = CONSTR
cnx.Open
2)然后在此连接对象上执行更新查询
dim vsqk as string
vsql = ""
vsql = "UPDATE [MatchedLines$] M " _
& " SET M.[TMP] = 'X', [TMP2] = 'S' " _
& "WHERE M.[RO_ID] IN " _
& " (SELECT DISTINCT [RO_ID] FROM [Review$])"
cnx.execute vsql
我认为这对你有用。 谢谢你。