Excel 在vba中,一个函数如何将收到的paramarray参数传递给另一个函数?
在VBA中,有时可能需要将数量不确定的参数传递给函数。在VB世界中,paramarray处理这样的问题。但如果一个人需要,反过来又把这些传递给一个子函数呢 在这里的挑战中,我有两个不同的地方格式化字符串,插入后续值,例如:Excel 在vba中,一个函数如何将收到的paramarray参数传递给另一个函数?,excel,vba,ms-access,paramarray,Excel,Vba,Ms Access,Paramarray,在VBA中,有时可能需要将数量不确定的参数传递给函数。在VB世界中,paramarray处理这样的问题。但如果一个人需要,反过来又把这些传递给一个子函数呢 在这里的挑战中,我有两个不同的地方格式化字符串,插入后续值,例如: Private Function PassTag_RunSQL(ByRef ds As clsSideXDB, cdStep As String, sql As String, ParamArray p() As Variant) As Boolean Dim v() As
Private Function PassTag_RunSQL(ByRef ds As clsSideXDB, cdStep As String, sql As String, ParamArray p() As Variant) As Boolean
Dim v() As Variant
v = p
PassTag_RunSQL = True
sql = SetSQLBase(sql, v)
...
tx=SetSQL(“更新tabA SET cd={1},其中id={2},“'123',89”)
根据情况,可能有1个或n个参数
当我直接处理所有的SQL时,这种方法工作得很好。例如:
Private Function PassTag_RunSQL(ByRef ds As clsSideXDB, cdStep As String, sql As String, ParamArray p() As Variant) As Boolean
Dim v() As Variant
v = p
PassTag_RunSQL = True
sql = SetSQLBase(sql, v)
...
set rsNEW=currentdb.execute(SetSQL(“更新tabA set cd={1},其中id={2}”,“123',89))
但是,我后来发现,我有几种情况下重复相同的处理,我想在某些时候将其中一些重构为一个更全面的调用。我想将SetSQL
包装到另一个例程中。例如:
Private Function PassTag_RunSQL(ByRef ds As clsSideXDB, cdStep As String, sql As String, ParamArray p() As Variant) As Boolean
Dim v() As Variant
v = p
PassTag_RunSQL = True
sql = SetSQLBase(sql, v)
...
public sub-DoMyDBThing(“UPDATE tabA SET cd={1}其中id={2},“'123',89”)
这使我处于一种需要将
paramarray
转换为paramarray
的情况下,解决方案是编写一个包装函数,将paramarray转换为数组变量
由于我已经使用了SetSQL
,它仍然接受paramarray
。它曾经做过的就是SetSQLBase
。这样,我的其他需要相同功能的扩展也可以使用paramarray,然后使用SetSQLBase
生成文本。这样我就不必复制程序了
因此:
Dim v() As Variant
v = p
SetSQL = SetSQLBase(sql, v())
End Function
当它将paramarray
重写为variant array
以传递给核心例程时,仍然会处理n个尾随参数:
Dim ct As Long
Dim tx As String
While InStr(1, sql, "{") > 0 And ct < 8
On Error Resume Next
tx = IIf(ct > UBound(p), "", p(ct))
On Error GoTo 0
ct = ct + 1
sql = Replace(sql, "{" & ct & "}", tx)
Wend
SetSQLBase = sql
End Function