基于控件名称而不是控件源(字段)的MS Access计算

时间:2016-06-06 13:02:15

标签: vba ms-access ms-access-2010

我正在创建一个基于动态SQL查询(存储过程)的MS Access报告,该报告根据当前日期输出字段,这意味着它在运行时提供的字段会根据查询的当前日期而变化跑。

我创建了一个vba脚本,它使用SQL Server用来输出字段的相同计算动态更改Access报告的控制源(这似乎工作正常),但我现在想要创建一些基于的计算总和那些动态控件的值,但我似乎无法在计算中使用控件名称(而不是控件源)。

E.G。

  • 我的SQL查询中有一个名为“201606 P”的(动态)字段输出,以及静态字段“Person”和“Project”。
  • MS Access报告已打开。
  • MS Access vba脚本执行与SQL查询中相同的计算,并将名为“Date1P”的控件更改为具有“201606 P”的控制源。
  • 报告按人分组,我想计算每个人的“201606 P”字段的总和。
    • 我的总和'未绑定'文本框控件的控件来源为“= Sum([Date1P])”,Date1P是我想在组中求和的控件的名称,而不是查询中提供的字段。
  • 打开时,Access会显示一个参数框,询问[Date1P]的值。

我可以仅使用另一个控件的名称来计算一个控件,而不是该控件的控件源(在查询运行之前我无法知道)吗?

我应该只是解决它并执行更多脚本来动态插入sum字段的控制源吗?

4 个答案:

答案 0 :(得分:1)

如果您根据来源打开记录集,您可以在VBA中按索引引用字段,例如:

MyValue = rs.Fields(8).Value + rs.Fields(2).Value / 100

答案 1 :(得分:1)

我想我明白你在问什么,看看问题。

我认为最简单的解决方案 - 看你已经在代码中做过类似的事情 - 就是更改Sum文本字段的ControlSource。我假设您的Summation控件的名称是" Date ofP的总和"

在您的代码中,脚本更改名为" Date1P"拥有" 201606 P"的控制源。

添加代码行

me.[Sum Of Date1P].ControlSource = "=Sum([201606 P])"

答案 2 :(得分:1)

如果需要,您可以尝试使用此SQL - 您应该看到一个名为" TotalsP"的新字段。在我们的报告查询中。 将总计字段的controlsource更改为" TotalsP" field - 和分组sum字段将是" = Sum([TotalsP])"

我想我的所有逗号和引号都排成一行。

declare @sql as varchar(max); 
select @sql = 'SELECT Person, Project, [Total P], [Total TS], 
' + stuff(( select distinct ',ISNULL(max(case [SortDate] when ''' + [SortDate] + ''' then PlanHours end), 0) as [' + [SortDate] + ' P],'
' + stuff(( select distinct ',ISNULL(max(case [SortDate] when ''' + [SortDate] + ''' then PlanHours end), 0) as [TotalsP]' 
+ ',ISNULL(max(case [SortDate] when ''' + [SortDate] + ''' then TimesheetHours end), 0) as [' + [SortDate] + ' TS]' 
from qryPTGTimesheetsCombinedAllUnionPrepTotalsTIM for xml path('')), 1, 1, ''); 
select @sql += ' FROM qryPreviousStaticQueryThatProvidesRecords GROUP BY Person, Project, [Total P], [Total TS];'; PRINT @sql; exec(@sql);

答案 3 :(得分:1)

好的 - 我想我发现了缺少的引号和逗号 - 我添加了两个新列TotalsByDateP - 应该是你想要的那个

declare @sql as varchar(max); 
select @sql = 'SELECT Person, Project, [Total P], [Total TS], 
' + stuff(( select distinct ',ISNULL(max(case [SortDate] when ''' + [SortDate] + ''' then PlanHours end), 0) as [' + [SortDate] + ' P]' 
+ ',ISNULL(max(case [SortDate] when ''' + [SortDate] + ''' then TimesheetHours end), 0) as [' + [SortDate] + ' TS]',
' + stuff(( select distinct ',ISNULL(max(case [SortDate] when ''' + [SortDate] + ''' then PlanHours end), 0) as [TotalsByDateP]' 
+ ',ISNULL(max(case [SortDate] when ''' + [SortDate] + ''' then TimesheetHours end), 0) as [TotalsByDateTS]' 
from qryPreviousStaticQueryThatProvidesRecords for xml path('')), 1, 1, ''); 
select @sql += ' FROM qryPreviousStaticQueryThatProvidesRecords GROUP BY Person, Project, [Total P], [Total TS];'; PRINT @sql; exec(@sql);

如果运行正常,请告诉我

如果是这样,您应该在我们的报告查询中看到名为" TotalsByDateP" 的新字段。 将总计字段的控制源更改为" TotalsByDateP"字段 - 分组总和字段为" = Sum([TotalsByDateP])"