有沒有辦法來調用一個函數,其中調用存儲在表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