【发布时间】:2010-07-14 13:11:19
【问题描述】:
我想添加一个到工作表的连接,以便每次刷新单元格时,都会从 SQL 传入一个值。我希望它在 ID =
的其他工作表之一上引用一个文本框如何设置连接以使用该值刷新。我在我的连接字符串中放了什么?我可以让它静态工作。
【问题讨论】:
-
VBA。如果他以前没有设置标签,他现在已经设置了。
标签: vba excel connection connection-string
我想添加一个到工作表的连接,以便每次刷新单元格时,都会从 SQL 传入一个值。我希望它在 ID =
的其他工作表之一上引用一个文本框如何设置连接以使用该值刷新。我在我的连接字符串中放了什么?我可以让它静态工作。
【问题讨论】:
标签: vba excel connection connection-string
Excel 有一个方便的小功能,称为“导入外部数据”。这就是我要做的:
在您的 Excel 文件中,转到 数据->导入外部数据->新建数据库查询(在您的情况下,导入数据选项不会是最好的方法)
完成向导。选择您的数据源等。除了最后一个选项,选择在 Microsoft Query 中查看数据或编辑查询
MS Query 基本上是一个小小的查询设计器。选择显示/隐藏标准图标(看起来像眼镜+漏斗)。
这个用于输入标准的界面很像 Access。选择一个字段,而不是硬编码值,使用 [Criteria](或其他东西)。
关闭 MS Query 并返回 Excel 文件。
在您的新数据范围内,右键单击Parameters。->从以下单元格获取值
不要忘记单元格值更改时自动刷新
总而言之,您正在使用参数导入外部数据,并将该参数的值声明为文件中的一个单元格。嗯,这是我自己工作的一个不错的小休息。我希望这会有所帮助。
【讨论】:
是什么导致单元格被刷新?连接字符串将取决于您使用的数据库。下面的示例使用 Access,需要引用 Microsoft ActiveX Dataobjects 2.8
数据被放入 sheet1 的单元格 (1,1) 中。 where 子句取自 sheet2 上的 textbox1:
Private Sub CommandButton1_Click()
Dim sqlQuery As String
sqlQuery = "SELECT * FROM myTable WHERE " & Worksheets("sheet2").TextBox1.Text
fetchData "C:\file_databases\myDatabase.accdb", Worksheets("sheet1").Cells(1, 1), sqlQuery
End Sub
Private Function fetchData(databaseName As String, targetRange As Range, sqlQuery As String)
Dim connection As New ADODB.connection
Dim records As New ADODB.Recordset
Dim connectionString As String
connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & databaseName & ";"
connection.Open connectionString
records.Open sqlQuery, connection
targetRange.CopyFromRecordset records
records.Close
connection.Close
End Function
【讨论】: