我有一个允许用户运行报告的Excel电子表格。打开电子表格后,会运行一个宏,提示用户输入用户名和密码以创建连接字符串。 (此信息仅存储在Excel的该实例中,并在文件关闭时丢失)
以下代码允许用户使用打开电子表格时创建的信息运行报告。这可以反复使用,不会提示输入用户名或密码。
With ActiveWorkbook.Connections("Custom_Query").ODBCConnection
.BackgroundQuery = True
Debug.Print strsql
.CommandText = SplitMeUp(strsql)
End With
ActiveWorkbook.Connections("Custom_Query").Refresh
但是,我想创建一个表。当我修改代码以便创建表时,系统会提示用户再次输入密码,即使他们在打开电子表格时已经这样做了。另外,我必须在下面的代码中使用ActiveWorkbook.Connections("Custom_Query").ODBCConnection.Connection
。如果我使用原始代码中的ActiveWorkbook.Connections("Custom_Query").ODBCConnection
,则VBA会出错。
With ActiveSheet.QueryTables.Add(Connection:=ActiveWorkbook.Connections("Custom_Query").ODBCConnection.Connection, _
Destination:=Range("a9"), Sql:=SplitMeUp(strsql))
.Refresh
如何引用文件打开时创建的连接字符串,以便不再提示用户重新输入密码?
答案 0 :(得分:0)
发生的事情是您正在运行连接两次。首先是这段代码
With ActiveWorkbook.Connections("Custom_Query").ODBCConnection
.BackgroundQuery = True
Debug.Print strsql
.CommandText = SplitMeUp(strsql)
End With
ActiveWorkbook.Connections("Custom_Query").Refresh
然后通过调用该方法作为
的一部分再次运行它With ActiveSheet.QueryTables.Add(Connection:=ActiveWorkbook.Connections("Custom_Query").ODBCConnection.Connection, _
Destination:=Range("a9"), Sql:=SplitMeUp(strsql))
.Refresh
您要做的是将连接分配给全局对象。没有看到你的所有代码,我最好的猜测是做以下事情:
在模块的顶部声明一个连接对象Public dbConnection as ADODB.Connection
。在您的启动例程中,您需要初始化它Set dbConnection = new ADODB.Connection
然后将其打开
With dbConnection
.Provider = "Microsoft.Jet.OLEDB.4.0" 'You'll need to use the correct Provider
ConnectionString = "Data Source=C:\MyFolder\MyWorkbook.xls;Extended Properties=Excel 8.0;" 'See the link for more info on connection string
.Open
End With
这是一个Connection String link,因为我无法记住它们。
然后,您可以运行引用dbConnection的命令,而不是重新运行连接方法,即ActiveWorkbook.Connections("Custom_Query").ODBCConnection
就个人而言,我创建了一个DAL模块来处理所有数据库交互,或者创建一个dbClass来处理数据操作。