Открытие отчета Access с помощью VB.NET

Я использую этот код, который нашел на 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

Я понятия не имею, как это решить.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Он отправляет на принтер, поскольку это то, что означает «нормальный» в 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 и показывать только отчет.

Настройки в 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.

Альберт Д. Каллал, большое спасибо за помощь, я думал, можно будет открыть отчет, не делая Access видимым.

Manuel Lapa 18.07.2024 07:56

Нет, но вы можете использовать интерфейс с вкладками, отключить вкладки, и вы увидите только ленту и отчет и ничего больше (также отключите панель навигации). Я полагаю, вы также можете отключить ленту, но это затруднит печать, если потребуется. Таким образом, вы можете показать только отчет с предлагаемыми настройками.

Albert D. Kallal 18.07.2024 08:45

Как я могу это сделать, это было бы здорово. Я пытался использовать MSA.Application.CommandBars, но не могу управлять панелями.

Manuel Lapa 18.07.2024 09:01

Посмотрите мои изменения, на самом деле это всего лишь несколько простых настроек, и в результате большая часть, если не вся, часть пользовательского интерфейса Access будет скрыта. И вы даже можете изменить размер этого «отчета», и хотя размер этого окна будет изменен, вы не увидите большую часть пользовательского интерфейса Access, если таковой вообще есть.

Albert D. Kallal 18.07.2024 18:10

Альберт Д. Каллал, большое спасибо.

Manuel Lapa 18.07.2024 18:20

Другие вопросы по теме