我想编写以下应该在 Excel 工作表中使用的函数:
=GetRecField("Foo Record Key", "FooField1")
...它将通过 ODBC 内部连接到 SQL 数据库,在那里执行
SELECT FooField1 FROM MyTable WHERE KEY_FIELD='Foo Record Key';
并将返回结果值作为函数 GetRecField 的结果。上面的 SQL 被授予只返回一条记录(IOW KEY_FIELD 具有唯一约束)。
当然,上面的函数可以在一张工作表中多次调用,所以请尽量避免盲目的QueryTables.Add
TIA。
最佳答案
你可以写一个自定义函数来做到这一点
- 打开 VBA 编辑器 (ALT-F11)
- 打开工具 -> 引用,确保选中“Microsoft ActiveX Data Objects 2.8 Library”和“Microsoft ActiveX Data Objects Recordset 2.8 Library”
- 右键单击“VBAProject”,然后选择“插入”->“模块”
- 打开模块。现在您可以创建自定义函数,例如:
Public Function GetItem(field As String, id As Integer) As String Set oConnection = New ADODB.Connection Dim oRecordset As ADOR.Recordset oConnection.Open "provider=sqloledb;data source=yourserver;" & _ "Trusted_Connection=yes;initial catalog=yourdatabase;" Set oRecordset = oConnection.Execute( & _ "select " & field & " from table where id = " & id) If oRecordset.EOF Then GetItem = "n/a" Else GetItem = oRecordset(field) End If End Function
您现在可以从单元格中调用函数:
=GetItem("字段名";2)
该模块是必需的,因为无法从 spreadhseet 内部调用非模块函数。
关于sql - 如何编写从 SQL 数据库返回值的 Excel 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/836065/