通过 VBA 函数在查询中添加新的计算字段
Adding a new calculated field in a Query through a VBA fuction
我正在尝试创建一个查询,从 VBA 函数中添加一个新的计算字段
我有一个现有的 table 叫做 QLIK
要计算新字段,我需要两个名为 SOCIETA
和 UNBUNDLING
的现有字段,它们包含在 table 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
指定为变体,但我在新列中只得到零。
关于我的代码有什么问题或其他方法有什么想法吗?
谢谢
使用 Nz 函数处理字段中的空值 - 这允许您指定 VBA 代码在字段值为空时可以处理的值。所以你的代码应该是这样的;
Switch((Nz(SOCIETA.Value, "") = "Company 1") And (Nz(UNBUNDLING.Value, "") = "U1") ....
这意味着当字段值为 null 时,Nz 函数将 return "".
我正在尝试创建一个查询,从 VBA 函数中添加一个新的计算字段
我有一个现有的 table 叫做 QLIK
要计算新字段,我需要两个名为 SOCIETA
和 UNBUNDLING
的现有字段,它们包含在 table 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
指定为变体,但我在新列中只得到零。
关于我的代码有什么问题或其他方法有什么想法吗?
谢谢
使用 Nz 函数处理字段中的空值 - 这允许您指定 VBA 代码在字段值为空时可以处理的值。所以你的代码应该是这样的;
Switch((Nz(SOCIETA.Value, "") = "Company 1") And (Nz(UNBUNDLING.Value, "") = "U1") ....
这意味着当字段值为 null 时,Nz 函数将 return "".