【问题标题】:Access case statement to return value from mutliple fields访问 case 语句以从多个字段返回值
【发布时间】:2014-05-03 17:48:06
【问题描述】:

我正在努力在 Access VBA 中编写一个案例语句,以执行在遇到案例时引用某个字段的相对直接的任务。

假设我有一张桌子,上面有 ID、产品类型、数量、金额、总计

QTY、Amount 和 Total 的含义相同,但在表中显示的位置取决于产品类型。即,如果产品类型为 1,则填充“数量”字段,如果产品类型 = 2,则填充“金额”字段。

我要做的是为查询编写一个函数,该函数引用结果的特定字段并产生如下内容:

如果 Type = 1,则参考 Quantity 的结果,如果 type = 2,则参考 Total 的结果等。我之前使用了 iif 语句来参考正确的列 (iif( [MainTable]![ Type] = "1",[main table]![Quantity],) 但在我的真实表中,'Type' 的变量太多了,所以这不再适用了..

Public Function TotalAmount(Type As String)

    Select Case Type

        Case "1"
            TotalAmount = "Quantity"

        Case "2"
            TotalAmount = "Total"

        Case "3"
            TotalAmount = "Amount"

    End Select

我对编码很陌生,所以我不知道如何为结果引用特定字段,这就是我所知道的。

【问题讨论】:

    标签: ms-access vba


    【解决方案1】:

    考虑在查询中使用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 内置帮助系统中的 Switch Function 主题。

    在评论中,当[Product Type] 为“3”、“4”或“5”时,您表示希望将[Amount] 作为返回字段。您可以调整Switch 的建议来实现这一点...

        Switch
            (
                [Product Type] = '1', [QTY],
                [Product Type] = '2', [Total],
                [Product Type] In ('3','4','5'), [Amount]
            ) As TotalAmount
    

    【讨论】:

    • 感谢汉斯的回复。当我使用单独的表达式将 switch 函数输入到构建器中时,它可以正常工作,但我似乎无法让“或”运算符工作?我想声明以下内容:金额:Switch([Table1]![Type]="1",[Table1]![QTY],[Table1]![Type]="2",[Table1]![Total ],[Table1]![Type]="3" Or "4" Or "5",[Table1]![Table1]![Amount]) 我尝试使用您提供的内容为此创建一个函数,但不能也不能让它工作......再次感谢!
    • 我仍然不确定如何将其作为函数输入?
    • 也许我们不在同一个页面上。我在查询中建议 Switch 作为创建自定义 VBA 函数的替代方法。你仍然打算创建一个函数吗?
    • 我认为自定义 VBA 函数会更简洁,更容易更新。而且有许多产品类型选择相同的结果,因此似乎没有必要复制相同的代码。.
    • 我已尝试使用您在查询中推荐的内容,但它似乎不接受“In”和“As”部分?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多