访问VBA,同时打开同一报表的多个实例

时间:2018-09-27 09:41:20

标签: vba ms-access access-vba

从表单中,我旨在打开报表的多个实例,而只显示ID的更改。

因此,VBA代码为:

    DoCmd.OpenReport "ordentallerSobre", acViewPreview, , "id = 20370"
    DoCmd.OpenReport "ordentallerSobre", acViewPreview, , "id = 20371"

然后,只有最后一个报告显示为选项卡。但是我需要展示两个。这个看似微不足道的问题有什么解决办法?

2 个答案:

答案 0 :(得分:4)

这不是那么简单。默认情况下,报表,表单和查询仅支持一个实例。

我的方法如下:

在报告中,在顶部({{1}之后)添加一行:

Option Explicit

然后,使用以下内容代替当前的代码:

Public Myself As Object

这将打开两个带有两个不同过滤器的报告。

请注意,它们都在默认视图中打开,无法更改。同样,使用此类对象也有很多困难,例如您无法在Dim rpt As Report_ordentallerSobre Set rpt = New Report_ordentallerSobre Set rpt.Myself = rpt rpt.Filter = "id = 20370" rpt.FilterOn = True rpt.Visible = True Set rpt = New Report_ordentallerSobre Set rpt.Myself = rpt rpt.Filter = "id = 20371" rpt.FilterOn = True rpt.Visible = True 集合中指定报表的实例或无法使用多个Reports语句。

Allen Browne上有一篇有关多实例表单的文章,与报告大致相同。他的方法比这种方法要复杂一些,但比我实际使用的方法要简单得多(该方法涉及一个管理这些多实例形式的预先声明的对象)

答案 1 :(得分:0)

我会使用'Distinct'子句。几周前,我不得不从表中导出项目,并将它们另存为单独的CSV文件。我会这样看你的问题。下面是我的工作代码。希望对您有帮助。

Option Compare Database

Private Sub Command0_Click()

Dim dbThis As Database
Dim rsThis As Recordset
Dim qdfNew As QueryDef

Set dbThis = CurrentDb()

Set rsThis = dbThis.OpenRecordset("Select Distinct OrderID as dValue from Orders where OrderID is not null", dbOpenSnapshot)

Do While Not rsThis.EOF
    Debug.Print rsThis.Fields("dValue").Value
    Set qdfNew = New QueryDef

    ' Don't use quotes if you are filtering on a numeric field
    qdfNew.SQL = "select * from Orders where OrderID = " & rsThis.Fields("dValue").Value & ""

    ' Use quotes around the variable if you are filtering on a text field
    ' qdfNew.SQL = "select * from Orders where OrderID = '" & rsThis.Fields("dValue").Value & "'"

    qdfNew.Name = "qryTemp"
    dbThis.QueryDefs.Delete "qryTemp"
    dbThis.QueryDefs.Append qdfNew
    qryTemp = qdfNew.SQL
    DoCmd.TransferText acExportDelim, , "qryTemp", "C:\Test\" & rsThis.Fields("dValue").Value & ".csv", True
    rsThis.MoveNext
Loop
rsThis.Close

End Sub

稍作修改,就可以使其适用于您的报告。