我想显示访问报告而不显示Access中的MainForm。我想在对话框或类似的东西中显示它。我可以显示报告,但可以打开Access主窗口:
_access.DoCmd.OpenReport(
"myReport", //ReportName
AcView.acViewReport, //View
System.Reflection.Missing.Value,
"my Where Condition"
);
但这将始终打开Access。我只想在对话框中查看我的报告。即使设置了AcWindowMode.acDialog
属性,它也会在其后面打开Access。
我也知道我可以将其另存为PDF并打开它。但这对我来说是不可能的。
是否可以在对话框中显示访问报告而不显示(或隐藏)访问主窗口?
答案 0 :(得分:1)
您可以这样操作:
首先,在访问应用程序中,将接口设置为选项卡式。并取消选中显示标签。
现在在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;
}
您可以考虑使用互操作程序集,因为这可以帮助智能感知,但是上面编写的内容没有提及办公或互操作程序集的使用。