Получите доступ к VBA, откройте несколько экземпляров одного и того же отчета одновременно - PullRequest
0 голосов
/ 27 сентября 2018

Из формы я стремлюсь открыть несколько экземпляров отчета с отображением только изменения идентификатора.

Итак, код VBA:

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

И тогда только последний отчет отображается в виде вкладки.Но мне нужно показать их обоих.Любое решение этой, по-видимому, тривиальной проблемы?

Ответы [ 2 ]

0 голосов
/ 29 сентября 2018

Я бы использовал предложение «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

С небольшими изменениями вы сможете настроить его для своего отчета.

0 голосов
/ 27 сентября 2018

Это не так тривиально.Отчеты, формы и запросы по умолчанию поддерживают только один экземпляр.

Мой подход заключается в следующем:

В отчете добавьте одну строку вверху (после 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 или использование нескольких операторов DoCmd.

Аллен Браун имеет статью о формах с несколькими экземплярами, которая примерно такая же, как отчеты.Его подход несколько более сложен, чем этот, но более прост, чем тот, который я на самом деле использую (который включает предварительно объявленный объект, который управляет этими формами с несколькими экземплярами)

...