Экспорт отчета о доступе в PDF - нераспознанная константа - PullRequest
0 голосов
/ 28 апреля 2018

Я занимаюсь разработкой небольшого приложения VB.NET, которое позволяет пользователю экспортировать отчет в формате PDF и сохранить его в определенном месте. Проблема в том, что константа acFormatPDF не распознается; следующий код не компилируется, с красной линией под acFormatPDF:

Dim AP As New Microsoft.Office.Interop.Access.Application
Dim dPath As String = "C:\"
Dim dReport As String = "Weekly_Schedule"

AP.OpenCurrentDatabase("H:\OvertimeRequest.accdb")
AP.DoCmd.OutputTo(Microsoft.Office.Interop.Access.AcOutputObjectType.acOutputReport, "", acFormatPDF, dPath & "\" & dReport, True)
AP.DoCmd.CloseDatabase()

Как я могу решить эту проблему?

1 Ответ

0 голосов
/ 28 апреля 2018

acFormatPDF по умолчанию не становится глобально доступной константой в VB.NET (как это было бы в VBA). Поэтому вы должны ссылаться на полное пространство имен: Microsoft.Office.Interop.Access.Constants.acFormatPDF.

В качестве альтернативы, вы можете добавить оператор Imports в начале файла: Imports Microsoft.Office.Interop.Access; тогда вы можете использовать константу acFormatPDF без полного пространства имен. Это позволит вам упростить другой код.

Вы также можете добавить импорт глобального уровня на уровне проекта, в настройках проекта VB.NET.

Поскольку значением этой константы является строка "PDF Format (*.pdf)", вы также можете передать саму строку.

Обновление

Если у вас есть оператор Imports, ваш код не компилируется с другой ошибкой:

BC30521 Не удалось разрешить перегрузку, так как недоступное значение «OutputTo» наиболее конкретно для этих аргументов:

'Sub OutputTo (ObjectType As AcOutputObjectType, [ObjectName As Object], [OutputFormat As Object], [OutputFile As Object], [AutoStart As Object], [TemplateFile As Object], [Кодировка как объект])': нет наиболее конкретно.

'Sub OutputTo (ObjectType As AcOutputObjectType, [ObjectName As Object], [OutputFormat As Object], [OutputFile As Object], [AutoStart As Object], [TemplateFile As Object], [Кодировка как объект], [OutputQuality As AcExportQuality = acExportQualityPrint]) ': Не очень конкретно.

Если вы посмотрите на определение типа DoCmd, вы увидите, что для OutputTo определены две перегрузки; компилятору VB.NET не удается выбрать один из других.

Чтобы решить эту проблему, вы можете передать значение для последнего аргумента, что приведет к использованию второй перегрузки; значение по умолчанию для этого аргумента AcExportQuality.acExportQualityPrint. Либо используйте позиционные аргументы, используя дополнительные запятые, чтобы ввести значение в последний аргумент:

AP.DoCmd.OutputTo(AcOutputObjectType.acOutputReport, "", Constants.acFormatPDF,
              dPath & "\" & dReport, True,,,
              AcExportQuality.acExportQualityPrint)

или именованные аргументы:

AP.DoCmd.OutputTo(AcOutputObjectType.acOutputReport, "", Constants.acFormatPDF,
              dPath & "\" & dReport, True,
              OutputQuality:=AcExportQuality.acExportQualityPrint)

(ссылки 1 и 2 )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...