Я использую этот код, который нашел на vb.net Macorotti и адаптировал для запуска Visual Studio 2019. Он работает при печати, но когда я прошу его просмотреть отчет AcWindowMode.acWindowNormal, он также отправляет его на принтер. Помогите мне найти решение.
Imports Microsoft.Office.Interop.Access
Public Class Frm_AccessRelatorio
Private Sub Frm_AccessRelatorio_Load(sender As Object, e As EventArgs) Handles MyBase.Load
cboRelatorios.SelectedIndex = 0
BtnFechar.Focus()
End Sub
Private Sub BtnExecutar_Click(sender As Object, e As EventArgs) Handles BtnExecutar.Click
If cboRelatorios.SelectedIndex = -1 Then
MessageBox.Show("Selecione um relatório", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Information)
Return
End If
Try
Dim MSA As New Microsoft.Office.Interop.Access.Application
MSA.Application.Visible = False
MSA.OpenCurrentDatabase(strPath & "\Teste.accdb", False)
If rdbVisualizar.Checked Then
MSA.Application.DoCmd.OpenReport(cboRelatorios.Text, Microsoft.Office.Interop.Access.AcWindowMode.acWindowNormal)
'maximiza a janela
MSA.Application.DoCmd.Maximize()
Else
MSA.Application.DoCmd.OpenReport(cboRelatorios.Text, Microsoft.Office.Interop.Access.AcView.acViewNormal)
End If
Catch ex As Exception
MessageBox.Show("Erro : " & ex.Message, "Erro ao acessar o objeto", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Try
End Sub
End Class
Я понятия не имею, как это решить.





Он отправляет на принтер, поскольку это то, что означает «нормальный» в VBA, и, следовательно, это означает то же самое в vb.net.
Далее, если вы пытаетесь просмотреть отчет, вам нужно сделать доступ видимым, и у вас есть видимость = False, что, конечно, противоречит всей вашей цели — отобразить отчет вместо его печати.
Итак, этот код работает для меня:
Dim MSA As New Microsoft.Office.Interop.Access.Application
MSA.Application.Visible = True
MSA.OpenCurrentDatabase("c:\test\test444.accdb", False)
MSA.Application.DoCmd.OpenReport("rptHotelsA",
Microsoft.Office.Interop.Access.AcView.acViewPreview)
Обратите внимание на использование «предварительного просмотра» вместо «Нормального», поскольку, как уже отмечалось, нормальный = отправка непосредственно на принтер.
С другой стороны, совершенно непонятно, почему вы хотите запустить копию Access в VB, а затем запустить отчет, поскольку такой процесс гораздо лучше выполнять в Access без введения кода VB.
Однако независимо от ваших целей вам необходимо открыть отчет в режиме «предварительного просмотра», а не в «обычном», и чтобы просмотреть отчет, вам необходимо установить для объекта приложения Access значение Visible = true.
В комментариях вопрос был как скрыть интерфейс Access.
Как я уже говорил, вы можете скрыть большую часть, если не весь, пользовательский интерфейс Access и показывать только отчет.
Настройки в Access такие:
Используйте интерфейс с вкладками, отключите вкладки.
Следовательно, файл-> параметры-> Текущая база данных-> параметры окна документа.
Итак, установите интерфейс с вкладками (не перекрывающиеся окна) и отключите отображение вкладок.
Отсюда это:
Затем в разделе «Навигация» отключите отображение панели навигации.
Отсюда это:
Как уже отмечалось, на этом этапе единственным пользовательским интерфейсом будет отчет и лента отчета. Мне часто нравится лента отчетов, поскольку она позволяет пользователю отправлять/сохранять отчет в формате PDF или распечатывать отчет.
Итак, теперь результатом вышеописанного является окно с отчетом, и отображаются только отчет и лента отчета. А если использовать acReportView, то лента отчета даже не отображается.
А если вы измените размер окна Access, размер отчета всегда будет изменен в соответствии с имеющимся у вас размером окна. Результат таков:
Как уже отмечалось, я думаю, вы могли бы отключить ленту.
Следовательно, с помощью этого кода vb.net:
Dim MSA As New Microsoft.Office.Interop.Access.Application
MSA.Application.Visible = True
MSA.OpenCurrentDatabase("c:\test\test444.accdb", False)
MSA.Application.DoCmd.ShowToolbar("Ribbon", 2)
MSA.Application.DoCmd.OpenReport("rptHotelsA",
Microsoft.Office.Interop.Access.AcView.acViewReport)
И теперь результат — просто окно с отчетом.
Следовательно:
Таким образом, с помощью всего лишь нескольких простых настроек вы можете легко скрыть большую часть пользовательского интерфейса Access.
Нет, но вы можете использовать интерфейс с вкладками, отключить вкладки, и вы увидите только ленту и отчет и ничего больше (также отключите панель навигации). Я полагаю, вы также можете отключить ленту, но это затруднит печать, если потребуется. Таким образом, вы можете показать только отчет с предлагаемыми настройками.
Как я могу это сделать, это было бы здорово. Я пытался использовать MSA.Application.CommandBars, но не могу управлять панелями.
Посмотрите мои изменения, на самом деле это всего лишь несколько простых настроек, и в результате большая часть, если не вся, часть пользовательского интерфейса Access будет скрыта. И вы даже можете изменить размер этого «отчета», и хотя размер этого окна будет изменен, вы не увидите большую часть пользовательского интерфейса Access, если таковой вообще есть.
Альберт Д. Каллал, большое спасибо.
Альберт Д. Каллал, большое спасибо за помощь, я думал, можно будет открыть отчет, не делая Access видимым.