[英]Sumproduct in Excel VBA using function arguments as source
我正在尝试编写一个VBA函数,该函数将函数参数作为源,然后在其上运行SQL命令。 我目前正在第一步中执行的SQL命令等效于Excel的sumproduct()函数,在SQL中,该函数类似于“ SELECT SUM(A * B)”。
我修改了另一个站点的一些代码,这些站点使用SQL将Excel表转换为单列,并对其进行了修改以计算sumproduct,但是在将子例程转换为函数时遇到了麻烦。
当前工作代码:
Sub doSQL()
Dim strCon As String
Dim oneSQL As String
' refer to 'microsoft activex data objects library'
Dim cn As Object
Dim rs As Object
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source='" & ThisWorkbook.FullName & "';" & _
"Extended Properties='Excel 12.0;HDR=No;IMEX=1';" ' HDR=No means no headers (field names)
cn.Open strCon ' open connection
'-------------------------------------------------------------------------------
' F1, F2, F3 are the default fieldnames when no headers are included with data
oneSQL = "SELECT sum(F1 * F2) FROM [Sheet1$B:D] where F1 not like '' AND F2 not like ''"
rs.Open oneSQL, cn ' get recordset
Sheets("Sheet1").Range("A:A").ClearContents
Sheets("Sheet1").Range("A1").CopyFromRecordset rs ' copy recordset to worksheet
'-------------------------------------------------------------------------------
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
End Sub
最终结果是单元格A1返回等于sumproduct(B3:B5,C3:C5)的等价物。
我尝试将其转换为函数:
Function SQL_sumproduct(A As Variant, B As Variant) As Double
Dim strCon As String
Dim oneSQL As String
' refer to 'microsoft activex data objects library'
Dim cn As Object
Dim rs As Object
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source='" & ThisWorkbook.FullName & "';" & _
"Extended Properties='Excel 12.0;HDR=No;IMEX=1';" ' HDR=No means no headers (field names)
cn.Open strCon ' open connection
oneSQL = "SELECT sum(A * B)"
rs.Open oneSQL, cn ' get recordset
'-------------------------------------------------------------------------------
' Sheets("Sheet1").Range("A:A").ClearContents
' Sheets("Sheet1").Range("A3").CopyFromRecordset rs ' copy recordset to worksheet
'-------------------------------------------------------------------------------
SQL_sumproduct = rs
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
End Function
由于代码无法将函数参数A和B识别为源,因此最终出现错误。
谁能给我一些有关如何修改“数据源”参数以识别函数自变量的指导?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.