Открытие pdf файлов через MS-Word - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь открыть файл pdf через MS Word, выполнить определенные действия, такие как оценка вычислений, печать файлов и т. Д., А затем приступить к закрытию файла.Полученное сообщение об ошибке: «Microsoft Excel ожидает, пока другое приложение завершит действие OLE».

Я ранее пробовал гиперссылку и метод Shell MyPath & " " & MyFile, vbNormalFocus, он не работает.Я все еще на начальном этапе открытия PDF-файлов, пожалуйста, совет.Спасибо!

Sub Extract_PDF_Data()

Dim mainData As String
Dim strFile As String
Dim Oldname As String
Dim Newname As String
Dim Folderpath As String

Dim s As String
Dim t As Excel.Range
Dim wd As New Word.Application
Dim mydoc As Word.Document



Folderpath = InputBox("Folder path: ")
Folderpath = Folderpath & "\"
strFile = Dir(Folderpath & "", vbNormal)


Do While Len(strFile) > 0
Oldname = Folderpath & strFile
Set wd = CreateObject("Word.Application")
Set mydoc = Word.Documents.Open(Filename:=Oldname, Format:="PDF Files", 
ConfirmConversions:=False)

mainData = mydoc.Content.Text
mydoc.Close False
wd.Quit


strFile = Dir
Loop

End Sub

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Я думаю, что сочетание этих трех источников приведет к ответу:

Как открыть PDF в Excel?

Как извлечь данныеиз PDF с помощью VBA?

Как открыть и распечатать PDF с помощью VBA?

Я думаю, что это будет примерно так:

Sub Extract_PDF_Data()

Dim mainData As String
Dim strFile As String
Dim Oldname As String
Dim Newname As String
Dim Folderpath As String
Dim s As String
Dim t As Excel.Range
Dim Appshell As Variant
Dim ap As String
Dim Browsedir As Variant
Dim f As Variant
Dim KeyWord As String

' This is a suggestion, I use it because it is more convenient than copy-pasting folder paths
Dim FSO As Object
Set FSO = CreateObject("Scripting.Filesystemobject")

 ' Get Folder over user input
Set Appshell = CreateObject("Shell.Application")
Set Browsedir = Appshell.BrowseForFolder(0, "Select a Folder", &H1000, "E:\Xample\Path")

' check if not cancalled
If Not Browsedir Is Nothing Then
      Folderpath = Browsedir.items().Item().Path
Else
    GoTo Quit
End If

KeyWord = "The_Materialist_Example"

' go through all files in the folder
For Each f In FSO.GetFolder(Folderpath).Files
    ' if file is a pdf , open, check for keyword, decide if should be printed
    If LCase(Right(f.Name, 3)) = "pdf" Then

        ' Here the methods suggest different answers.
        ' You can either use FollowHyperLink or use the Adobe Library to OPEN PDF

        ' I would write a function that checks the active pdf for the keyword : IsKeyFound
        Debug.Print Folderpath & "\" & f.Name

        Call PrintPDF(Folderpath & "\" & f.Name)
        If IsKeyFound(f, KeyWord) Then
            f.Print
        End If
    End If
Next f

Quit:
End Sub

Private Sub PrintPDF(strPDFFileName As String)
  Dim sAdobeReader As String 'This is the full path to the Adobe Reader or Acrobat application on your computer
  Dim RetVal As Variant
  sAdobeReader = "C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe"
  'Debug.Print sAdobeReader & "/P" & Chr(34) & strPDFFileName & Chr(34)
  RetVal = Shell(sAdobeReader & " /P " & Chr(34) & strPDFFileName & Chr(34), 0)
End Sub


Private Function IsKeyFound(PDF As Variant, KeyWord As String) As Boolean
   'Decide if file needs to be printed, insert your criteria and search algorithm here
End Function

Я не смог выяснить, как извлечь ключевые слова, однако вы могли бы использовать пользовательский ввод какПервый подход, а затем перейти к автоматическому сканированию PDF.

Надеюсь, это продвинет вас дальше на пути к решению.

0 голосов
/ 12 декабря 2018

Не используйте ключевое слово New в строке, которая объявляет переменную объекта.Это «заблокирует» переменную объекта - это вызовет ошибку, когда код позже попытается создать его экземпляр.Этот метод может работать в VB.NET, но не в VBA.

Сделайте это примерно так:

Dim wd As Word.Application
Set wd = New Word.Application. 'Or use CreateObject
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...