在对话框中显示访问报告

Show Access Report in dialog

我想显示 Access 报告而不显示 Access 的 MainForm。我想在对话框或类似的东西中显示它。我可以显示报告,但打开 Access 的 Main Window:

        _access.DoCmd.OpenReport(
            "myReport", //ReportName
            AcView.acViewReport, //View
            System.Reflection.Missing.Value,
            "my Where Condition"
        );

但这会一直打开 Access。我只想在对话框中查看我的报告。即使我设置 AcWindowMode.acDialog 属性 它也会在它后面打开 Access。

我也知道我可以将它保存为 PDF 并打开它。但这对我来说是不可能的。

有没有办法在对话框中显示访问报告而不显示(或隐藏)后面的访问主 Window?

你可以这样做:

首先,在访问应用程序中,将界面设置为标签式。和 un-check 显示标签。

现在在 Access 的标准代码模块中编写代码存根。

这样说:

Sub RunMyReport(s As String)

  DoCmd.ShowToolbar "Ribbon", acToolbarNo
  
  ' now launch report
  
  DoCmd.OpenReport "qryHotels", acViewReport

End Sub

现在,您的 .net 代码将如下所示 (我什至不关心互操作——它没有多大帮助)。 您有此 .net 代码:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    Dim objAccess As Object = CreateObject("Access.Application")

    objAccess.OpenCurrentDatabase("C:\test\test44.accdb")

    objAccess.Run("RunMyReport", "qryHotels")
    objAccess.Visible = True

End Sub

结果现在将如下所示:

note the vb form that launched the form.

Note the Access report, 
it shows no ribbon or background interface.

请注意,我们将报告名称传递给给定的例程。 现在您可能可以移动此 VBA 代码:

 DoCmd.ShowToolbar "Ribbon", acToolbarNo
  
  ' now launch report
  DoCmd.OpenReport "qryHotels", acViewReport

到 .net 端,甚至不必调用 VBA 例程。

    Dim objAccess As Object = CreateObject("Access.Application")

    objAccess.OpenCurrentDatabase("C:\test\test44.accdb")

    objAccess.DoCmd.ShowToolbar("Ribbon", 2)       ' acToolbarNo = 2
    objAccess.DoCmd.OpenReport("qryHotels", 5)     ' acViewReport = 5

    objAccess.Visible = True

所以,实际上我们不需要VBA辅助函数,我们可以打开任何报表。隐藏功能区的命令有效,其他设置(隐藏导航窗格,标签式界面要在访问应用程序中设置)。

所以上面应该有效。只要几行vb.net代码,那么作为c#,应该很容易转换。例如,这应该有效:

{
var objAccess = Interaction.CreateObject("Access.Application");
objAccess.OpenCurrentDatabase(@"C:\test\test44.accdb");
objAccess.DoCmd.ShowToolbar("Ribbon", 2);       // acToolbarNo = 2
objAccess.DoCmd.OpenReport("qryHotels", 5);     // acViewReport = 5
objAccess.Visible = true;
}

您可以考虑 inter-op 程序集,因为它对 intel-sense 有帮助,但以上内容没有任何参考办公室或使用 inter-op 程序集。