修改microsoft excel宏中的嵌入式连接字符串

luk*_*emh 15 excel vba

我有一个Excel文档,其中有一个宏,运行时将修改CommandText该连接以从Excel电子表格传入参数,如下所示:

Sub RefreshData()
ActiveWorkbook.Connections("Job_Cost_Code_Transaction_Summary")
  .OLEDBConnection.CommandText = "Job_Cost_Code_Transaction_Summary_Percentage_Pending @monthEndDate='" & Worksheets("Cost to Complete").Range("MonthEndDate").Value & "', @job ='" & Worksheets("Cost to Complete").Range("Job").Value & "'"
ActiveWorkbook.Connections("Job_Cost_Code_Transaction_Summary").Refresh
End Sub
Run Code Online (Sandbox Code Playgroud)

我希望刷新不仅可以修改连接命令,还可以修改连接,因为我也希望将它与不同的数据库一起使用:

在此输入图像描述

就像宏用电子表格中的值替换命令参数一样,我希望它也可以从电子表格中的值替换数据库服务器名称和数据库名称.

不需要完整的实现,只需使用表单中的值修改连接的代码就足够了,我应该能够从那里开始工作.

我试着这样做:

 ActiveWorkbook
 .Connections("Job_Cost_Code_Transaction_Summary")
 .OLEDBConnection.Connection = "new connection string"
Run Code Online (Sandbox Code Playgroud)

但这不起作用.谢谢.

luk*_*emh 13

我的问题的答案如下.

所有其他答案大多是正确的,并专注于修改当前连接,但我只想知道如何在连接上设置连接字符串.

这个错误归结于此.如果您查看我的屏幕截图,您会看到连接字符串是:

Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=ADCData_Doric;Data Source=doric-server5;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=LHOLDER-VM;Use Encryption for Data=False;Tag with column collation when possible=False
Run Code Online (Sandbox Code Playgroud)

我试图设置该字符串 ActiveWorkbook.Connections("Job_Cost_Code_Transaction_Summary").OLEDBConnection.Connection = "connection string"

当我只是尝试将完整的字符串分配给Connection时,我收到了一个错误.我能够使用该属性将MsgBox当前连接字符串,但不能在不收到错误的情况下设置连接字符串.

我后来发现连接字符串需要OLEDB;预先添加到字符串中.

所以这现在有效!!!

ActiveWorkbook.Connections("Job_Cost_Code_Transaction_Summary").OLEDBConnection.Connection = "OLEDB;Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=ADCData_Doric;Data Source=doric-server5;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=LHOLDER-VM;Use Encryption for Data=False;Tag with column collation when possible=False"
Run Code Online (Sandbox Code Playgroud)

非常微妙,但那是虫子!