Хобрук: Ваш путь к мастерству в программировании

Код VBA выполняется, но только если я прохожу через него

Я использовал некоторый код из Закройте открытый PDF-файл после его открытия с помощью FollowHyperlink чтобы создать следующий код, чтобы открыть файл PDF и переименовать его. Код работает нормально, но только если я прерываю выполнение в MsgBox «Break Here» и вхожу в него с помощью клавиши F8. Любые идеи о том, почему он не будет выполняться автоматически?

Sub OpenPDF()
    'Opens PDF Scaned file & saves it to another folder
    '***ErrorHandler***
    On Error Resume Next
    '***Declare Objects****
    Dim objectWMI As Object
    Dim objectProcess As Object
    Dim objectProcesses As Object
    Dim Path As String
    Dim MyDir As String
    '***Opens a new workbook if there are no active workbooks***
    '***There must be an active workbook for FollowHyperlink to function***
    nowbs = Application.Workbooks.Count
    If nowbs = 1 Then
        Application.Workbooks.Add
    Else
    End If
    '***Saves current Excel path
    MyDir = CurDir
    '***Sets path to Ricoh Scans
    PDFDir = "S:\Ricoh Scans"
    ChDir PDFDir
    '***Gets filename for PDF scan
    Path = Application.GetOpenFilename(filefilter:="PDF file (*.pdf), *.pdf")
    '***Opens PDF file***
    ActiveWorkbook.FollowHyperlink Path
    '***Sets Excel as active application
    AppActivate "Microsoft Excel"
    '***Prompts for PO number****
    MyPONum = InputBox("Enter PO Number", "PO Editor", "30500")
    '***If user selects Cancel on inputbox then xl closes Acrobat and exits sub
    If MyPONum = vbNullString Then
        GoTo EndAll
    Else
    End If
    '***Replaces scanned filename with inputbox filename
    PathLen = Len(Path)
    OldName = Mid(Path, 16, PathLen - 19)
    NewName = "S:\Materials Management\Purchase Orders\PO " & MyPONum & ".pdf"
EndAll:
    '***Set Objects***
    Set objectWMI = GetObject("winmgmts://.")
    Set objectProcesses = objectWMI.ExecQuery("SELECT * FROM Win32_Process  WHERE Name = 'Acrobat.exe'") '< Change if you need be ** Was AcroRd32.exe**
    '
    '
    'Code executes fine up to here but must Ctrl + Break at this line
    'and F8 step thru balance of code or it will not work
    '
    '
    MsgBox "Break Here"
    '***Terminate all Open PDFs***
    For Each objectProcess In objectProcesses
        Call objectProcess.Terminate
    Next
    '***Clean Up***
    Set objectProcesses = Nothing
    Set objectWMI = Nothing
    '***Renames scanned file and moves it to Materials Management folder***
    Name Path As NewName
    '***Resets current directory
    ChDir MyDir
End Sub
12.01.2018

  • Удалите On Error Resume Next, и вы, скорее всего, получите информативное сообщение об ошибке. Если это не поможет, вам нужно сообщить нам, как это не удается. 12.01.2018
  • On Error Resume Next НЕ является ***ErrorHandler***. Он подавляет ошибки и позволяет коду продолжать выполняться в состоянии ошибки, что означает, что ваш код делает Очень плохое предположение™. 12.01.2018
  • Если ваш код не будет выполняться сразу, это, вероятно, указывает на проблему с синхронизацией: какой-то требуемый процесс не завершается вовремя для следующего шага. 12.01.2018
  • Чтобы решить проблему, с которой вы столкнулись, вам, вероятно, потребуется какая-то задержка между завершением процессов. Попробуйте добавить Application.Wait(Now + TimeValue("00:00:02")) перед Call objectProcess.Terminate (также следует удалить Call. 12.01.2018
  • Спасибо всем за ваш вклад. Я не программист, и, как я уже сказал, я использовал код, который был размещен в другом месте на этом сайте. Это был вопрос времени. 15.01.2018

Ответы:


1

Спасибо всем за ваш вклад. Я не программист, и, как я уже сказал, я использовал код, который был размещен в другом месте на этом сайте. Это была проблема времени, и это редактирование работает.

    '***Terminate all Open PDFs***
    For Each objectProcess In objectProcesses
    objectProcess.Terminate
    Next
    '***Clean Up***
    Set objectProcesses = Nothing
    Set objectWMI = Nothing
    '***************
    Application.Wait (Now + TimeValue("00:00:02"))
    '***Renames scanned file and moves it to Materials Management folder***
    Name Path As NewName
    '***Resets current directory
    ChDir MyDir

    End Sub
15.01.2018
Новые материалы

Понимание дженериков в TypeScript: подробное руководство
Введение TypeScript, строго типизированный надмножество JavaScript, хорошо известен своей способностью улучшать масштабируемость, удобочитаемость и ремонтопригодность приложений. Одной из..

Учебные заметки JavaScript Object Oriented Labs
Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

Разбор строк запроса в vue.js
Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
«Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..

Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

Как настроить Selenium в проекте Angular
Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

Аргументы прогрессивного улучшения почти всегда упускают суть
В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..