将访问报告导出为PDF - 无法识别的常量

时间:2018-04-28 17:13:56

标签: vb.net ms-access pdf

我正在开发一个小型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 :(得分:1)

默认情况下,

acFormatPDF不会成为VB.NET中的全局可用常量(就像在VBA中一样)。因此,您应该引用完整的命名空间:Microsoft.Office.Interop.Access.Constants.acFormatPDF

或者,您可以在文件开头添加Imports语句:Imports Microsoft.Office.Interop.Access;那么你可以使用没有完整命名空间的acFormatPDF常量。这样可以简化其他代码。

您还可以在项目级别的VB.NET项目设置中添加全局级导入。

由于此常量的值是字符串"PDF Format (*.pdf)",因此您也可以传入字符串本身。

<强>更新

获得Imports语句后,您的代码不会使用其他错误进行编译:

  

BC30521过载解决方案失败,因为无法访问&#39; OutputTo&#39;这些论点最具体:

     
    

&#39; Sub OutputTo(ObjectType As AcOutputObjectType,[ObjectName As Object],[OutputFormat As Object],[OutputFile As Object],[AutoStart As Object],[TemplateFile As Object],[Encoding As Object]) &#39;:不是最具体的。

         

&#39; Sub OutputTo(ObjectType As AcOutputObjectType,[ObjectName As Object],[OutputFmat As Object],[OutputFile As Object],[AutoStart As Object],[TemplateFile As Object],[Encoding As Object], [OutputQuality As AcExportQuality = acExportQualityPrint])&#39;:不是最具体的。

  

如果查看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)

(链接12