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

Posted

技术标签:

【中文标题】通过 VBA 函数在查询中添加新的计算字段【英文标题】:Adding a new calculated field in a Query through a VBA fuction 【发布时间】:2015-10-20 15:45:24 【问题描述】:

我正在尝试创建一个查询,从 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 指定为 Variants,但我在新列中只得到零。

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

谢谢

【问题讨论】:

【参考方案1】:

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

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

这意味着当字段值为空时,Nz函数将返回“”。

【讨论】:

以上是关于通过 VBA 函数在查询中添加新的计算字段的主要内容,如果未能解决你的问题,请参考以下文章

可以通过 VBA 更改 MS Access 子表单字段吗?

在excel中用vba实现与sql数据库的数据比较

MS-Access 获取字段值,通过 VBA 函数运行,并发送到 SQL

ACCESS数据库中如何自动计算某一个字段的值?

通过 VBA excel 程序在 MS Word 标题中的边框线后添加页码和新行

Excel用VBA连接Access数据库查询语句补充