如何编写从SQL数据库返回值的Excel函数?

Joh*_*mas 3 sql excel odbc

我想编写以下函数,该函数应该在Excel工作表中使用:

=GetRecField("Foo Record Key", "FooField1")
Run Code Online (Sandbox Code Playgroud)

...将通过ODBC内部连接到SQL数据库,在那里执行

SELECT FooField1 FROM MyTable WHERE KEY_FIELD='Foo Record Key';
Run Code Online (Sandbox Code Playgroud)

并将返回结果值作为函数GetRecField的结果.上述SQL被授予仅返回一条记录(IOW KEY_FIELD具有唯一约束).

当然,上述功能可以在工作表中多次调用,所以请尽量避免盲目 QueryTables.Add

TIA.

And*_*mar 6

您可以编写自定义函数来执行此操作

  1. 打开VBA编辑器(ALT-F11)
  2. 打开工具 - >引用,并确保选中"Microsoft ActiveX数据对象2.8库"和"Microsoft ActiveX数据对象记录集2.8库"
  3. 右键单击VBAProject,然后选择"插入" - >"模块"
  4. 打开模块.现在您可以创建自定义函数,例如:
    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
  1. 您现在可以从单元格中调用该函数:

    =的GetItem( "字段名"; 2)

该模块是必需的,因为无法从spreadhseet内部调用非模块函数.