通过VBA函数在Query中添加新的计算字段

时间:2015-10-20 15:45:25

标签: mysql vba access-vba ms-access-2013

我正在尝试创建一个从VBA函数添加新计算字段的查询

我有一个名为QLIK

的现有表格

要计算新字段,我需要两个名为SOCIETAUNBUNDLING的现有字段,这些字段包含在表QLIK中。

它被称为WBS的新字段,我在VBA例程中使用SWITCH Function(但我想使用一些IIF嵌套将是相同的),因为有太多的参数来创建直接在查询中使用代码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指定为变量,但我在新列中只得到零。

我的代码或其他方法有什么问题吗?

由于

1 个答案:

答案 0 :(得分:0)

使用Nz函数处理字段中的空值 - 这允许您指定当字段值为空时VBA代码可以处理的值。所以你的代码就像是;

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

这意味着当字段值为null时,Nz函数将返回&#34;&#34;。