0

好的,朋友们,我将在一个半星期后离职,我正在努力让我的老板更容易完成我所做的事情。他没有访问知识,所以我正在尝试创建一个表单来自动化我一直在生成的报告。我没有为所有不同的报告创建不同的表单,而是尝试从参数表中自动化它。这就是我想要的:我有一个我创建的表,它由 5 个字段组成。我想使用这些字段来填充标准表单模板中的参数字段。我表中的五个字段如下:

  1. 正在运行的查询类型(结果吐出)
  2. 生成此报告的查询,用逗号分隔,没有空格。"QRYNAMEA,QRYNAMEB"
  3. 这些查询生成的表,将由transferspreadsheet
  4. 目标 excel 文件,它已经设置了一个数据透视表来提供数据。
  5. 此 excel 文件的输入表。目前,所有这些工作表都称为“输入”。(这不重要)

我的问题是在我制作组合框后不知道去哪里。我知道足够的视觉基础来自动化我的查询,但不足以用 3,4 和 5 中的信息填充表单(到目前为止,我一直在为不同的查询手动更改这些)。我不知道如何从“选择框”中的选择中查找表中的记录,然后从我的自动化中选择单个字段。

我对解析 #2 和自动执行查询以及将值放入我正在查看的字段中的能力非常有信心,但我不知道如何从表中实际提取这些值,然后才可以做这些事情。我似乎也无法很好地描述这一点,让谷歌帮助我。

有没有人做过这样的事情?我假设我只是缺乏对其中一个 VBA 库的了解,但我没有找到任何运气。

编辑:此时我的倾向是为此表创建一个查询,该查询将根据我提供的输入返回一个字段。我可以想象在 SQL 中执行此操作,但我仍然不知道如何填充表单,也不知道如何从表中提取字段对象。

我今天必须出去,但我会在星期五回来继续研究这个问题,一旦找到解决方案,我就会发布我的解决方案。这似乎是一个独特的难题,如果能给出答案就好了。

最终编辑:代码经过优化(没有太多错误处理方式):

  1. 第一种方法是从表中提取字段并填充表单,通过在组合框中选择一个新条目来激活它,如下所示:

    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
    
  2. 第二个代码提取该数据以运行查询。我喜欢结果如何。它在单击组合框附近的按钮时运行。

    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. 据我从简短的谷歌搜索中可以看出,这种自动化工作尚未在访问中完成。它应该使访问文盲更容易运行他们自己的查询,并且设计人员可以简单地添加到,如果他们希望在点击几下后可以使用所有查询。

可以想象,有人可以使用它来按顺序自动化各种报告,方法是遍历我引用的表格。

4

1 回答 1

1

我可能会严重误解您在做什么,但我认为这就像使用表单向导创建新表单一样简单。它可以让您选择包含数据的表,并让您选择要添加的字段。

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

我理解正确吗?

编辑:这将用表中字段的内容填充变量(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
于 2013-08-22T01:36:17.533 回答