在Excel中运行在宏中返回SQL查询的UDF

j91ykkif  于 2023-05-01  发布在  其他
关注(0)|答案(1)|浏览(171)

第一个代码块是一个UDF,我使用它来运行SQL查询,并根据电子表格中的值进行更新。它有效地作为电子表格中的公式。下面的块试图在宏中使用UDF来执行查询并获得记录计数,但我在为正确的语法而挣扎。任何建议将不胜感激。

Function SqlExec(SqlStmt As String, Trigger As Integer)

Dim CString As String

CString = _
    "Provider=SQLOLEDB.1;" & _
    "Password=P@ssw0rd;" & _
    "Persist Security Info=True;" & _
    "User ID=sa;Initial Catalog=GlasPacLX_Testdb;" & _
    "Data Source=192.168.19.110\gts;" & _
    "Use Procedure for Prepare=1;" & _
    "Auto Translate=True;" & _
    "Packet Size=4096;" & _
    "Workstation ID=TWOSEATER;" & _
    "Use Encryption for Data=False;" & _
    "Tag with column collation when possible=False"

Trigger = Sheets("Code").Range("Trigger").Value

If Trigger = 1 Then

Dim Cn As ADODB.Connection, Rs As ADODB.Recordset
    
    Set Cn = New ADODB.Connection
    Set Rs = New ADODB.Recordset

Cn.Open CString
Rs.Open SqlStmt, Cn, adOpenForwardOnly
SqlExec = Rs.GetRows
Rs.Close
Set Rs = Nothing
Cn.Close
Set Cn = Nothing

End If

End Function

下面是我试图用来执行查询并在消息框中显示结果的宏。查询返回一个整数。宏不工作(byref参数类型不匹配)。有什么办法解决吗?

Sub SqlExecCount()

Trigger = 1
SqlStmt = "SELECT COUNT(DocumentNumber) FROM Document"

MsgBox SqlExec(SqlStmt, Trigger)

End Sub
jm81lzqq

jm81lzqq1#

Rs.GetRows返回一个二维数组:不能直接使用MsgBox显示
尝试以下操作:

MsgBox SqlExec(SqlStmt, Trigger)(0, 0)

来自GetRows的数组是从零开始的-第一维是字段索引,第二维是数据行索引。

相关问题