我努力在Access VBA中编写一个case语句来执行在满足案例时引用某个字段应该是相对直接的任务。
说我有一张表ID,产品类型,数量,金额,总数
QTY,Amount和Total都意味着相同的事情,但表中显示的内容取决于产品类型。即,如果产品类型为1,则“数量”为“数量”。如果产品类型= 2,则会填充字段,然后是“金额”字段。字段将填充。
我尝试做的是为查询编写一个函数,该查询引用结果的特定字段并生成如下内容:
如果Type = 1,则参考Quantity的结果,如果type = 2,则参考Total的结果等。之前使用iif语句引用正确的列(iif([MainTable]![输入] =" 1",[主表格]![数量],但是在我的真实表格中有太多变量用于' Type'所以这不再做了..
Public Function TotalAmount(Type As String)
Select Case Type
Case "1"
TotalAmount = "Quantity"
Case "2"
TotalAmount = "Total"
Case "3"
TotalAmount = "Amount"
End Select
我对编码很陌生,所以我不知道如何参考特定字段的结果,这就是我所拥有的。
答案 0 :(得分:2)
在查询中考虑Switch
表达式来评估这些情况并返回正确字段的值。 (您可能不需要自定义VBA功能。)
SELECT
ID,
[Product Type],
Switch
(
[Product Type] = '1', [QTY],
[Product Type] = '2', [Total],
[Product Type] = '3', [Amount]
) As TotalAmount
FROM YourTable;
注意Switch
逻辑类似于您在VBA函数中使用的Select Case
。所以我希望这个建议相当清楚。如果不够清楚,请查看Access'中的切换功能主题。内置帮助系统。
在评论中,当[Amount]
为" 3"," 4"或"时,您表示您希望[Product Type]
作为返回的字段5&#34 ;.您可以调整Switch
建议来实现...
Switch
(
[Product Type] = '1', [QTY],
[Product Type] = '2', [Total],
[Product Type] In ('3','4','5'), [Amount]
) As TotalAmount