【问题标题】:Manipulate column expression/formulas in multiple Access 2016 Queries在多个 Access 2016 查询中操作列表达式/公式
【发布时间】:2021-10-13 11:27:23
【问题描述】:

我习惯于使用 excel/excel vba,并负责使用访问报告。

每个月我都有大量不同的查询,我需要操作基本相同的表达式/公式。随着时间的推移,将一列(一年中的月份)添加到上一财年的总额中。

月份列的简化表达式示例,用于按月号抓取待定指标的数据: 第 3 列是 M1: Sum(IIf([TableName].Month=1 And Forms!frmTest!cboMetric="x",[x],IIf([TableName].Month=1 And Forms!frmTest!cboMetric="y" ,[y],0))) 第 4 列是 M2: Sum(IIf([TableName].Month=2 And Forms!frmTest!cboMetric="x",[x],IIf([TableName].Month=2 And Forms!frmTest!cboMetric="y" ,[y],0))) 等几个月。

会计年度至今列表达式 FYTD= [M1] + [M2] 等。

所以财政年度的每个月我都需要加上下个月,所以 = [M1] + [M2] + [M3],那么之后的月份 =[M1] + [M2] + [M3] + [M4],以此类推,直到我只需要的新会计年度 =[M1]。

我不知道是否可以在 vba 或其他方式中自动执行此操作或将公式放入表条目中,并使其成为我需要的查询的表达式,然后只需更改该条目。

【问题讨论】:

  • 是的,代码可以修改查询对象,但为什么不直接构建查询,计算所有 12 个月并将所有 12 个月相加。如果数据是多年的,可能需要包含年份作为查询的过滤条件。
  • 你能放几个样本数据以便更好地澄清吗?

标签: vba ms-access ms-access-2016


【解决方案1】:

这是一个例子。我喜欢使用公共函数来实现业务规则,因为您可以在任何地方使用业务规则。

Private metric As String
'encapsulating form properties in synthetic public properties using public functions has lots of advantages but is not necessary
Public Function getMetric() As String
getMetric = IIf(IsNull(metric), "default", metric)
End Function
Public Function setMetric(value) As Boolean
metric = value
setMetric = True ' calling subroutines can be confusing so pointless return value to make a function
End Function

Public Function MonthSum(Month As Integer, metric As String) As Double
Dim X, Y As Double
X = DLookup("X", "Table3", "Month = " & Month) 'need to get values from other rows so we must resort to Dlookup or correlated sub queries
Y = DLookup("Y", "Table3", "Month = " & Month)
MonthSum = IIf(metric = "x", X, IIf(metric = "y", Y, 0))
End Function
Public Function FYTD(Month As Integer, metric As String) As Double
'todo tighten this loop
Select Case Month
Case 1
FYTD = MonthSum(1, metric)
Case 2
FYTD = MonthSum(1, metric) + MonthSum(2, metric)
Case 3
FYTD = MonthSum(1, metric) + MonthSum(2, metric) + MonthSum(3, metric)
Case 4
FYTD = MonthSum(1, metric) + MonthSum(2, metric) + MonthSum(3, metric) + MonthSum(4, metric)
Case 5
FYTD = MonthSum(1, metric) + MonthSum(2, metric) + MonthSum(3, metric) + MonthSum(4, metric) + MonthSum(5, metric)
Case 6
FYTD = MonthSum(1, metric) + MonthSum(2, metric) + MonthSum(3, metric) + MonthSum(4, metric) + MonthSum(5, metric) + MonthSum(6, metric)
Case 7
FYTD = MonthSum(1, metric) + MonthSum(2, metric) + MonthSum(3, metric) + MonthSum(4, metric) + MonthSum(5, metric) + MonthSum(6, metric) + MonthSum(7, metric)
Case 8
FYTD = MonthSum(1, metric) + MonthSum(2, metric) + MonthSum(3, metric) + MonthSum(4, metric) + MonthSum(5, metric) + MonthSum(6, metric) + MonthSum(7, metric) + MonthSum(8, metric)
Case 9
FYTD = MonthSum(1, metric) + MonthSum(2, metric) + MonthSum(3, metric) + MonthSum(4, metric) + MonthSum(5, metric) + MonthSum(6, metric) + MonthSum(7, metric) + MonthSum(8, metric) + MonthSum(9, metric)
Case 10
FYTD = MonthSum(1, metric) + MonthSum(2, metric) + MonthSum(3, metric) + MonthSum(4, metric) + MonthSum(5, metric) + MonthSum(6, metric) + MonthSum(7, metric) + MonthSum(8, metric) + MonthSum(9, metric) + MonthSum(10, metric)
Case 11
FYTD = MonthSum(1, metric) + MonthSum(2, metric) + MonthSum(3, metric) + MonthSum(4, metric) + MonthSum(5, metric) + MonthSum(6, metric) + MonthSum(7, metric) + MonthSum(8, metric) + MonthSum(9, metric) + MonthSum(10, metric) + MonthSum(11, metric)
Case 12
FYTD = MonthSum(1, metric) + MonthSum(2, metric) + MonthSum(3, metric) + MonthSum(4, metric) + MonthSum(5, metric) + MonthSum(6, metric) + MonthSum(7, metric) + MonthSum(8, metric) + MonthSum(9, metric) + MonthSum(10, metric) + MonthSum(11, metric) + MonthSum(12, metric)
End Select
End Function

对于这个例子,我在表单的组合框中设置了指标:

Private Sub cboMetric_AfterUpdate()
setMetric (Me.cboMetric.value)
End Sub

然后我在查询中使用度量:

当我在 cboMetric 中选择 y 并重新运行我得到的查询时:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-17
    • 2021-11-19
    • 2021-01-29
    • 1970-01-01
    相关资源
    最近更新 更多