2015-10-20 63 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函数将返回“”。