有没有办法来调用一个函数,其中调用存储在表VBA函数调用
**Record 1 task Function call**
124567 Email customer Call function emailcus(a,b,c,d)
434535 AddCost Call function addcost(a,b,c,d)
干杯
格雷厄姆
有没有办法来调用一个函数,其中调用存储在表VBA函数调用
**Record 1 task Function call**
124567 Email customer Call function emailcus(a,b,c,d)
434535 AddCost Call function addcost(a,b,c,d)
干杯
格雷厄姆
这是已经被haarrrgh给出的答案的变化,所以如果你觉得它有用,一定要注意那个。
还有另一种处理DB存储函数调用占位符的方法。首先,正是如此改变你的数据:
**Record 1 task Function call**
124567 Email customer Call function emailcus([TokenA],[TokenB])
434535 AddCost Call function addcost([TokenA],[TokenB])
注意,[SquareBrackets]
是不在这个例子中实际需要的语法,只是我倾向于在这种情况下使用的东西。重要的部分是让参数标记一些不会出现在字符串值其他地方的东西(包括其他标记)。你可以根据需要使用尽可能多的参数,只要确保调用代码知道每个函数调用字符串的期望值(我把它缩小以缩短我的下面的代码)。
然后当它的时间打电话给你的功能,这样做:
Dim ReturnValue As String 'or as appropriate for individual the function's return
Dim EvalString As String
EvalString = 'code to fetch from table
EvalString = Replace(EvalString, "[TokenA]", strValueA) 'strValueA passed in?
EvalString = Replace(EvalString, "[TokenB]", strValueB) 'strValueB passed in?
ReturnValue = Eval(EvalString)
在VB6中,至少(所以我认为这是在VBA真),Replace
比串联更快。我也发现这更具可读性,但这可能是因为我习惯于使用类似技术在代码中构建SQL命令(使用Const
声明而非DB存储,但这也可以)。
编辑
正如我重读我的“完成”后刚刚提出申请后,我意识到,有一个疑难杂症潜伏在那里。因为你在之前进行替换将字符串提交到Eval
,这些是正在放入字符串中的实际值,而不是变量。我上面提供的代码工作正常如果您的参数是数字,但如果它们是字符串类型您必须包括引号,无论是在您的数据或在您的Replace
调用。我更喜欢前者,所以更改您的数据是:
**Record 1 task Function call**
124567 Email customer Call function emailcus('[TokenA]','[TokenB]')
434535 AddCost Call function addcost('[TokenA]','[TokenB]')
这个工程作为一个Const
测试。在数据库记录存储,你可能需要这个来代替:
**Record 1 task Function call**
124567 Email customer Call function emailcus(""[TokenA]"",""[TokenB]"")
434535 AddCost Call function addcost(""[TokenA]"",""[TokenB]"")
(这还与一个Const
...)。
另一种方法是保持数据,因为它是我的第一部分,&改变Replace
电话:
EvalString = Replace(EvalString, "[TokenA]", """" & strValueA & """") 'strValueA passed in?
'or maybe
EvalString = Replace(EvalString, "[TokenB]", "'" & strValueB & "'") 'strValueA passed in?
一对夫妇的其他潜在的陷阱:这些必须是功能,而不是替补,和他们必须被宣布为Public
在模块,而不是在窗体的代码。
是的,你可以使用该功能。
语法:
Dim ReturnValue As String
ReturnValue = Eval("MyFunction(1, 2)")
请注意,您必须提供确切的函数调用包括参数。
我指出了这一点,因为我不确定参数a,b,c,d在你的例子中是否只是你的例子的虚拟值,或者你希望VBA填入一些变量的值自动命名为a,b,c,d。
eval函数确实不做到这一点,所以如果你需要的变量值作为参数,你会做这样的事情:
Dim ReturnValue As String
Dim EvalString As String
EvalString = "MyFunction(" & Variable1 & ", " & Variable2 & ")"
ReturnValue = Eval(EvalString)
感谢您的帮助 – Graham 2011-05-15 19:50:40