我从其他来源提取了代码,尝试在PDF文件中搜索特定的字符串。 (代码源)https://acrobatusers.com/forum/general-acrobat-topics/search-text-pdf-vba-only-adobe-reader-installed/。我尝试使用此资源是因为我没有Adobe Professional,并且由于公司的状况,此类请求至少需要一个月的时间才能处理完毕,并且可能仍被拒绝。因此,我必须尝试在没有Adobe Professional的情况下使其正常工作。
到目前为止,当我尝试运行/测试此代码时,它返回错误
“编译错误:未定义用户定义的类型”
并突出显示代码的Dim gAvDoc As Acrobat.AcroAVDoc
部分。这表明我在参考文献中缺少某些内容。我试图选择看似相关的参考文献,但没有成功。
有人可以让我知道是否缺少参考吗?如果是这样,我需要选择什么参考才能使代码正常工作。这些是我目前检查过的参考资料:
- “ Visual Basic for Applications”;
- “ Microsoft Excel 14.0对象库”;
- “ OLE自动化”;
- “ Microsoft Office 14.0对象库”;
- “ Adobe Acrobat浏览器控件类型库1.0”;
- “ Adobe Reader文件预览类型库”;
- 'Attachmate_Reflection_Objects';
- 'Attachmate_Reflection_Objects_Emulation_IbmHosts';
- 'Attachmate_Reflection_Objects_Emulation_OpenSystems';
- 'Attachmate_Reflection_Objects_Framework';
- “ Acrobat Access 3.0类型库”; 'AcroBrokerLib';
- “ Active DS类型库”;
- “ Microsoft ActiveX数据对象2.0库”;
- “ Microsoft ActiveX数据对象(多维)6.0库”
我也在运行Windows 10和Microsoft Excel 2010
Option Explicit
Sub SearchPDF_forString()
Dim gAvDoc As Acrobat.AcroAVDoc 'Robby change, "Acrobat.AcroAVDoc" to "Object"
Dim gPDFPath As String
Dim foundText As Integer 'Holds return value from "FindText" method
Dim Rsp 'For message box responses
Dim sText As String 'Robby Addition
Dim sStr As String 'Robby Addition
Dim resp As String 'Robby Addition
gPDFPath = "\\DTCHYB-MNMH001\C_WBGCTS_Users\U658984\My Documents\QC_random\DuplicateFormProject_ForKevin\1099DALL_1.pdf"
'set AVDoc object for searching
Set gAvDoc = CreateObject("AcroExch.AVDoc")
If gAvDoc.Open(gPDFPath, "") Then
sText = "041-3600122117"
'FindText params: StringToSearchFor, caseSensitive (1 or 0), WholeWords (1 or 0), ResetSearchToBeginOfDocument (1 or 0)
foundText = gAvDoc.FindText(sText, 1, 0, 1) 'Returns -1 if found, 0 otherwise
Else
' if failed, show error message
Rsp = MsgBox("Cannot open" & gPDFPath, vbOKOnly)
End If
If foundText = -1 Then
'compose a message
sStr = "Found " & sText
resp = MsgBox(sStr, vbOKOnly)
Else
' if failed, show error message
resp = MsgBox("Cannot find" & sText, vbOKOnly)
End If
End Sub