通过 VBA 函数在查询中添加新的计算字段
Posted
技术标签:
【中文标题】通过 VBA 函数在查询中添加新的计算字段【英文标题】:Adding a new calculated field in a Query through a VBA fuction 【发布时间】:2015-10-20 15:45:24 【问题描述】:我正在尝试创建一个查询,从 VBA 函数添加一个新的计算字段
我有一个名为QLIK
的现有表
要计算新字段,我需要两个名为 SOCIETA
和 UNBUNDLING
的现有字段,它们包含在表 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
指定为 Variants,但我在新列中只得到零。
对我的代码有什么问题或其他方法有什么想法吗?
谢谢
【问题讨论】:
【参考方案1】:使用 Nz 函数处理字段中的空值 - 这允许您指定 VBA 代码在字段值为空时可以处理的值。所以你的代码会是这样的;
Switch((Nz(SOCIETA.Value, "") = "Company 1") And (Nz(UNBUNDLING.Value, "") = "U1") ....
这意味着当字段值为空时,Nz函数将返回“”。
【讨论】:
以上是关于通过 VBA 函数在查询中添加新的计算字段的主要内容,如果未能解决你的问题,请参考以下文章
MS-Access 获取字段值,通过 VBA 函数运行,并发送到 SQL