我正在尝试使用VBA连接到MySQL,以便编写Excel中生成的结果。我需要编写数千行,每行包含大约100列。所以我在开始编写结果之前创建了单独的子程序来连接MySQL,然后对于每一行,我需要运行一个'insert'查询,最后,我需要关闭连接。
我创建了以下我在主程序中调用的潜艇:
sub main
dbconnect
for i = 1 to 50000
dbupdate
next i
dbclose
sub dbconnect()
Dim cn as ADODB.connection
Set cn = New ADODB.Connection
cn.open "Driver .............." (usual stuff)
sub dbupdate()
dim sqlstr as string
sqlstr = "insert into table " .... (some query to write the results in a table)
cn.execute sqlstr
sub dbclose()
cn.close
cn = nothing
但是,当它出现在dbupdate或dbclose子例程中时,我的宏似乎不理解cn。似乎我在dbconnect中设置的连接不能被其他子例程访问。宏在dbupdate中的cn.execute sqlstr处停止,并显示以下错误:运行时错误91:对象变量或使用块变量注释集。
我有办法让这项工作成功吗?
非常感谢!
答案 0 :(得分:1)
您在dbconnect()子系统中声明了连接对象。 这意味着在子结束执行后连接将不复存在。 要解决此问题,请将其设置为任何sub:
之外的公开声明的变量Public cn as ADODB.connection 'Declare it here!!!
Sub main()
dbconnect
for i = 1 to 50000
dbupdate
next i
dbclose
'....
End Sub
Sub dbconnect()
Set cn = New ADODB.Connection
cn.open "Driver .............." (usual stuff)
'....
End Sub
Sub dbupdate()
dim sqlstr as string
sqlstr = "insert into table " .... (some query to write the results in a table)
cn.execute sqlstr
End Sub
Sub dbclose()
cn.close
Set cn = nothing 'Use set keyword!
End Sub