我正在开发一个小型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()
我该如何解决这个问题?
答案 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)