2015-10-20 61 views
0

我試圖創建一個查詢從VBA函數通過VBA機能的研究

我現有的表稱爲QLIK

要計算添加一個新的計算字段添加在查詢一個新的計算領域新字段I需要兩個現有字段SOCIETAUNBUNDLING,它們包含在表QLIK中。

新的領域,它被稱爲WBS和我使用的是SWITCH Function(但我想用一些IIF嵌套將是相同的)在VBA程序,因爲有太多的參數來創建的代碼buldier直接在現場查詢

然後我把它從一個SQL語句,如:

SELECT fieldA, fieldB,…, GetWBS() AS WBS_C 
FROM QLIK; 

目前我有以下的(簡化)代碼:

Public Function GetWBS() As String 
Dim WBS As String 
Dim cdb As DAO.Database 
Dim Q As Recordset 
Dim SOCIETA As Field, UNBUNDLING As Field 
Set cdb = CurrentDb 
Set Q = cdb.OpenRecordset("QLIK") 
Set SOCIETA = Q.Fields("SOCIETA") 
Set UNBUNDLING = Q.Fields("UNBUNDLING") 
While Not Q.EOF 
GetWBS = Switch(_ 
[SOCIETA] = "Company 1" And ([UNBUNDLING] = "U1"), WBS = "AAA", _ 
[SOCIETA] = "Company 1" And ([UNBUNDLING] <> "U1"), WBS = "BBB", _ 
[SOCIETA] = " Company 2", WBS = "CCC", _ 
[SOCIETA] = " Company 3", WBS = "DDD") 
Q.MoveNext 
Wend 
Q.Close 
End Function 

但我收到「運行時錯誤94無效使用null」。我試圖指定GetWBS() Function和變量WBS作爲變體,但我只在新列中獲得零。

任何有關我的代碼或其他方式做錯的想法?

感謝

回答

0

使用新西蘭功能在田間處理空值 - 這可以讓你指定的值當字段值爲null VBA代碼可以處理。所以你的代碼會是這樣的;

Switch((Nz(SOCIETA.Value, "") = "Company 1") And (Nz(UNBUNDLING.Value, "") = "U1") .... 

這意味着當字段值爲null時,Nz函數將返回「」。