Ms access 基于表单上的组合框自动选择查询

Ms access 基于表单上的组合框自动选择查询,ms-access,vba,Ms Access,Vba,好了,朋友们,我一周半后就要离开我的工作了,我正在努力让我的老板能更轻松地完成我的工作。他没有访问知识,所以我正在尝试创建一个表单来自动生成我生成的报告。我没有为所有不同的报告创建不同的表单,而是尝试从一个参数表中将其自动化。以下是我想要的: 我创建了一个表,它由5个字段组成。我想使用这些字段来填充标准表单模板中的参数字段。我表格中的五个字段如下所示: 将结果吐出的正在运行的查询类型 生成此报告的查询,以逗号分隔,不带空格。QRYNAMEA,QRYNAMEB 这些查询生成的表,将由transfe

好了,朋友们,我一周半后就要离开我的工作了,我正在努力让我的老板能更轻松地完成我的工作。他没有访问知识,所以我正在尝试创建一个表单来自动生成我生成的报告。我没有为所有不同的报告创建不同的表单,而是尝试从一个参数表中将其自动化。以下是我想要的: 我创建了一个表,它由5个字段组成。我想使用这些字段来填充标准表单模板中的参数字段。我表格中的五个字段如下所示:

将结果吐出的正在运行的查询类型 生成此报告的查询,以逗号分隔,不带空格。QRYNAMEA,QRYNAMEB 这些查询生成的表,将由transferspreadsheet使用 目标excel文件,该文件已经设置了一个数据透视表以提供数据。 此excel文件的输入表。目前,所有这些工作表都称为输入。这并不重要 我的问题是在制作组合框后不知道去哪里。我知道足够的VisualBasic来自动化我的查询,但不足以用3、4和5中的信息填充表单。到目前为止,我一直在为不同的查询手动更改这些信息。我不知道如何从“choosebox”中的选项中查找表中的记录,然后从自动化中选择各个字段

我对自己解析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部分的最终代码与所选答案几乎相同,只是我获取了多个字段。这是因为我知道我有唯一的查询类型,并且我的记录集只包含一条记录

无论如何,我希望一些人偶然发现这一点,并发现它有用。如果你愿意,给我发个信。从谷歌的简短搜索中我可以看出,这种自动化工作还没有在access中完成。它应该使access文盲能够更容易地运行自己的查询,并且如果设计师希望在点击几下之后就可以使用所有查询,那么他们可以简单地添加到其中


可以想象,有人可以通过迭代我引用的表来按顺序自动化各种报表。

我可能对您所做的工作有很大误解,但我认为这与使用表单向导创建新表单一样简单。它将允许您选择包含数据的表,并允许您选择要添加的字段

您可以稍后将任何文本框更改为组合框,这样可以限制可供填写的选项

我理解对了吗

编辑:这将用表中字段的内容填充变量MyRandomField

Dim db as Database
Dim rec as Recordset

set db = CurrentDB
set rec = db.OpenRecordSet("Select SomeField from SomeTable Where Something = 'SomethingElse'")

MyRandomField = rec("SomeFieldName")

set rec = Nothing
set db = Nothing

没有自动的方法来拉这个。如果我按照您所描述的进行操作,则需要某种文档表,其中包含从组合框中选择查询后要显示的所有详细信息。@HansUp我无法在帖子中嵌入照片,也无法找到一种格式,因此这里有一个屏幕截图:最上面一行是唯一充实的一行,但它们都遵循相同的格式。不完全一样,除非其他组合框会根据我的第一个组合框包含的内容自动填充。没有办法将查询结果输入表单吗?因为现在我正在考虑查询表中与组合框条目匹配的字段,然后将这些值读入表单其他地方的文本框中,类似于默认值。我的大问题是,如何将表或查询中的值分配给vba中的变量?看起来应该是什么
直截了当,一切都考虑到了。@GMoany-看看我上面的编辑。这将用表或查询中字段的内容填充变量。也就是说,假设WHERE子句只从表/查询返回1条记录。否则,您可以使用Do While rec.EOF=False循环遍历返回的每个记录。这非常完美。我一直在vba中鬼混,试图将表作为excel对象打开,但这正是我真正需要的。谢谢你,先生。我已经上传了我的项目的最终代码,这远远不止是这个问题。我本来想纠正你在第5行中使用括号的问题,但看起来你已经解决了这个问题。