【发布时间】:2013-08-28 06:31:59
【问题描述】:
好的,朋友们,我将在一个半星期后离职,我正在努力让我的老板更轻松地完成我所做的事情。他没有访问知识,所以我正在尝试创建一个表单来自动化我一直在生成的报告。我没有为所有不同的报告创建不同的表单,而是尝试从参数表中自动化它。这就是我想要的: 我有一个我创建的表,它由 5 个字段组成。我想使用这些字段来填充标准表单模板中的参数字段。我表中的五个字段如下:
- 正在运行的查询类型(结果输出)
- 生成此报告的查询,以逗号分隔且不包含空格。
"QRYNAMEA,QRYNAMEB" - 这些查询生成的表,将由
transferspreadsheet使用 - 目标 Excel 文件,已设置数据透视表来馈送数据。
- 此 Excel 文件的输入表。目前,所有这些工作表都称为“输入”。 (这不重要)
我的问题是在我制作组合框后不知道去哪里。我知道足够的视觉基础来自动化我的查询,但不足以用 3,4 和 5 中的信息填充表单(到目前为止,我一直在为不同的查询手动更改这些)。我不知道如何从“选择框”中的选择中查找表中的记录,然后从我的自动化中选择单个字段。
我对解析 #2 和自动执行查询以及将值放入我正在查看的字段中的能力非常有信心,但我不知道如何实际从表中提取这些值,在我做这些事情之前。我似乎也无法很好地描述这一点,让谷歌帮助我。
以前有人做过这样的事情吗?我假设我只是缺乏对其中一个 VBA 库的了解,但我没有找到任何运气。
编辑: 在这一点上,我倾向于为该表创建一个查询,该查询将根据我提供的输入返回一个字段。我可以想象在 SQL 中执行此操作,但我仍然不知道如何填充表单,也不知道如何从表中提取字段对象。
我今天必须出去,但我会在星期五回来继续研究这个问题,一旦找到我就会发布我的解决方案。这似乎是一个独特的难题,如果能给出答案就好了。
最终编辑:代码已完善(没有太多错误处理方式):
-
第一种方法是从表格中提取字段并填充表单,通过在组合框中选择一个新条目来激活它,如下所示:
Private Sub QuerySelect_Change() Dim db As Database Dim rec As Recordset Set db = CurrentDb Set rec = db.OpenRecordset("SELECT [Queries to Run], [Source Table], [Destination Spreadsheet], [Destination Sheet Name] FROM TBL_QRY_SETTINGS WHERE TBL_QRY_SETTINGS.[Query Type] Like '" & [Forms]![QuerySelector]![QuerySelect] & "';") [Forms]![QuerySelector]![QueriesToRun].Value = rec("Queries to Run") [Forms]![QuerySelector]![SourceTable].Value = rec("Source Table") [Forms]![QuerySelector]![FileDest].Value = rec("Destination Spreadsheet") [Forms]![QuerySelector]![SheetName].Value = rec("Destination Sheet Name") Set rec = Nothing Set db = Nothing End Sub -
第二个代码提取该数据以运行查询。我喜欢结果如何。它在单击组合框附近的按钮时运行。
Private Sub DynamicQuery_Click() Dim qryArray As Variant Dim i As Integer qryArray = Split([Forms]![QuerySelector]![QueriesToRun], ",") DoCmd.SetWarnings False For i = LBound(qryArray) To UBound(qryArray) Debug.Print qryArray(i) DoCmd.OpenQuery (qryArray(i)) Next DoCmd.SetWarnings True DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, [Forms]![QuerySelector]![SourceTable], _ [Forms]![QuerySelector]![FileDest], _ True, [Forms]![QuerySelector]![SheetName] End Sub
请注意,第 (1) 部分的最终代码与所选答案几乎相同,只是我抓取的字段不止一个。这是因为我知道我有唯一的“查询类型”,并且我的记录集将只包含一条记录。
无论如何,我希望有些人偶然发现它并发现它很有用。 Send me a message if you do。据我从简短的谷歌搜索中得知,这种自动化工作尚未在访问中完成。如果设计人员希望在单击几下后就可以使用所有查询,那么它应该可以让不熟悉访问权限的人更轻松地运行他们自己的查询,并且让设计人员可以轻松添加。
可以想象,有人可以使用它来按顺序自动生成各种报告,方法是遍历我引用的表格。
【问题讨论】:
-
没有自动的方法来拉这个。如果我按照您所描述的内容进行操作,则需要某种文档表,其中包含从组合框中选择查询后要显示的所有详细信息。
-
@HansUp 我无法在帖子中嵌入照片,也想不出很好的格式,所以截图如下:i.imgur.com/EuTi5bY.png 最上面一行是唯一的充实,但它们都遵循相同的格式。