2011-11-28 74 views
0

Excel 2007:我从Access表中获取数据,Excel工作表称为“数据”。我的Excel报表单元格通过链接到这些数据单元格(= Data!A1)来填充,并且一些报表单元格具有简单的代码。但我的问题是,我的报告需要指定一条记录。示例:数据记录1:姓名=乔,出生= 7/29/62,国家=美国:记录2:姓名=山姆,出生= 4/13/74,国家=中国...我们如何控制报告显示到特定的记录?如果我添加一个DropDown或ListBox,那么我们如何只为报告中名称选择的节目制作记录。有没有办法将代码放在列表框后面,或者我应该放弃列表并创建宏,那么用户选择要在报表中显示的数据的最佳方式是什么?建议请...Excel根据用户选择显示数据

回答

2

有两种方法我会使用。

当您在Excel中嵌入查询对象时(即,我假设您如何从Access中获取数据),您可以在小查询编辑器工具中编辑该查询。 您可以在此工具中为该查询添加条件 - 有一个过滤器图标,您可以选择名称列,然后在下面的框中键入“Sam”,然后生成一个SQL语句,该语句现在包含“Where Name = '相同'“在最后。

但是,这对报告没有帮助,因为我们很可能希望名称是从Excel工作表本身传入的参数。如果在标准框中键入“[输入名称]”而不是“Sam”,则方括号会告诉查询工具,这是用户提供的参数。当你从工具中运行查询时,你会得到一个弹出框,每次询问你的名字。

现在,当您退出查询工具并返回到Excel时,可以编辑该嵌入式查询对象的查询参数。您创建的参数(名称)存在,并且可以采用静态值,提示用户或获取单元格的内容。当单元格内容更改时,您甚至可以设置一个标志来刷新查询。

另一种方法稍微进一步并在某些VBA代码中操纵查询对象。例如,如果您需要做一些较重的提升或其他逻辑,并且您不想将其作为电子表格公式编写出来。一个简单的方法是在报表上放置一个按钮,并让VBA代码在该按钮的单击事件上启动。

+0

数据排序必须由最终用户在Excel中完成,这是您最后一段描述的内容。我现在使用一张报表和数据(“A1:H35中的数据”和“Z1:AF200中的数据”)...... – user745778

+0

续:我有一个下拉菜单,只显示唯一的名称。你可以帮我解决这个if语句来填充特定数据,然后我可以将报表映射到这些单元格:Private Sub RunName_Click()= IF(ButtonName <>“”然后显示数据只为该名称)End Sub ...也许如果数据是在一张单独的纸上,它会更容易? – user745778

+0

不确定我关注你的问题。过去,我使用多个查询对象制作了工作簿。这些可以从VBA侧更新;因此您可能会有一张运行查询的工作表,以在工作簿打开时刷新名称列表,然后填写一个范围,然后在下拉列表中将其用作下拉列表,然后再次查询第二个查询选择的结果。 – Mikeb