VB.NET调用Access报表预览时触发自动打印问题求助
解决Access报表预览时自动打印的问题
你的问题出在OpenReport方法的参数使用错误上。当你要预览报表时,需要明确指定视图模式为预览模式,而不是仅设置窗口模式。
原代码中预览分支的写法把AcWindowMode枚举值传给了第二个参数(视图模式参数),但第二个参数应该是AcView类型,这导致Access误解了你的意图,触发了默认的打印行为。
修正后的代码
将预览分支的代码修改为:
If rdbVisualizar.Checked Then ' 先设置Access应用可见,否则预览窗口会被隐藏在后台 MSA.Visible = True ' 指定视图为预览模式,窗口模式设置为正常 MSA.DoCmd.OpenReport(cboRelatorios.Text, AcView.acViewPreview, , , AcWindowMode.acWindowNormal) MSA.DoCmd.Maximize() Else MSA.DoCmd.OpenReport(cboRelatorios.Text, AcView.acViewNormal) End If
关键修正点
- 第二个参数必须传入
AcView.acViewPreview来触发报表预览,而非窗口模式枚举 - 打开预览前需设置
MSA.Visible = True,否则预览窗口会被隐藏,你看不到但可能仍触发打印逻辑 OpenReport的参数顺序为:报表名称、视图模式、筛选名称、筛选条件、窗口模式,必须严格对应参数位置
另外,建议使用完Access对象后及时释放,避免内存泄漏:
Catch ex As Exception MessageBox.Show("Erro : " & ex.Message, "Erro ao acessar o objeto", MessageBoxButtons.OK, MessageBoxIcon.Information) Finally ' 关闭数据库并释放COM对象 If Not MSA Is Nothing Then If MSA.CurrentDb IsNot Nothing Then MSA.CloseCurrentDatabase() End If System.Runtime.InteropServices.Marshal.ReleaseComObject(MSA) MSA = Nothing End If End Try
内容的提问来源于stack exchange,提问作者Manuel Lapa
相关产品推荐
相关产品推荐

