从VBA

时间:2017-07-04 13:57:38

标签: mysql excel-vba odbc adodb vba

我正在尝试使用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:对象变量或使用块变量注释集。

我有办法让这项工作成功吗?

非常感谢!

1 个答案:

答案 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