返回列表 上一主題 發帖

[發問] VBA使用 SQL 指令,User Defined Function(使用者自訂函數),如何輸入2個參數。

回復 7# Baracuda

純屬討論及個人看法

VBA ADO SQL 好像並不支援變數運算,
UDF也只是在結果欄位放入計算式而不是ADO會直接計算
這個題目,個人的看法是ADO的支援能力問題而不是 UDF 裡有幾個參數

主欄位也一樣不能用變數計算:
隨意舉例 "核定本薪"
Const aa=2

可以計算; 核定本薪 * 直接常數 2
lcCommandText = "SELECT 序號, 姓名,  核定本薪 * 2 as bb,  核定績效 , 薪資總額 , 勞保薪資 , 勞退薪資 , 健保薪資, " & _
                " 勞退 , 職災, 普通事故, 就業保險, 工資墊償, 全民健保, 全民健保舊, " & _
                "  '=Multiply_2_No_Round_Down_4_Up_5(' + trim(str(勞退)) + ',' +  trim(str(0.1)) + ')'  as 勞退個人 " & _
                "FROM " & "[" & Input_Sht & "$" & "A1:P32]"

可以計算; 核定本薪 *  " &  aa  & " ,變數已在成立  lcCommandText 字串時轉化了 aa 為 2,2 是常數不是變數
lcCommandText = "SELECT 序號, 姓名,  核定本薪 *  " &  aa  & " as bb,  核定績效 , 薪資總額 , 勞保薪資 , 勞退薪資 , 健保薪資, " & _
                " 勞退 , 職災, 普通事故, 就業保險, 工資墊償, 全民健保, 全民健保舊, " & _
                "  '=Multiply_2_No_Round_Down_4_Up_5(' + trim(str(勞退)) + ',' +  trim(str(0.1)) + ')'  as 勞退個人 " & _
                "FROM " & "[" & Input_Sht & "$" & "A1:P32]"

不會計算; 核定本薪 * aa  的變數 aa 是 lcCommandText 字串的一部分, ADO沒支援字串內的變數
lcCommandText = "SELECT 序號, 姓名,  核定本薪 * aa as bb,  核定績效 , 薪資總額 , 勞保薪資 , 勞退薪資 , 健保薪資, " & _
                " 勞退 , 職災, 普通事故, 就業保險, 工資墊償, 全民健保, 全民健保舊, " & _
                "  '=Multiply_2_No_Round_Down_4_Up_5(' + trim(str(勞退)) + ',' +  trim(str(0.1)) + ')'  as 勞退個人 " & _
                "FROM " & "[" & Input_Sht & "$" & "A1:P32]"

TOP

回復 7# Baracuda


    假設,
1. Excel VBA ADOSQL 並不支援 變數
2. SQL只是可以技巧性的在生成的欄位放入計算式,此計算式可以演算原始欄位資料

那就在 Excel 儲存格 放入計算式來呼叫 VBA內的 UDF,
此自訂函數就較有寬廣的運作空間了

TOP

        靜思自在 : 願要大、志要堅、氣要柔、心要細。
返回列表 上一主題