2016-02-11 2 views
0

Будучи нетрадиционным программистом, я склонен смотреть на вещи в другой перспективе. Это, случается, одно из тех времен. У меня есть accdb, который в настоящее время работает и выводит файлы PDF каждые 2 минуты. Новые PDF переписывают старые , за исключением, когда у кого-то открыт один из файлов. В этом случае он пропускает открытый файл, повторные попытки 2 минуты спустя. Проблема, с которой я сталкиваюсь, заключается в том, что некоторые пользователи, которые открывают эти PDF, сводят к минимуму их и забывают о них, в некоторых случаях, не позволяя обновлять файл в течение нескольких дней и даже недель. Что я хочу сделать, так это встроить действие для закрытия файла через несколько часов после его открытия. Я нашел, как это сделать enter link description here Я протестировал его, и он работает. Проблема, которую я имею, - это как-то через VBA, вставить это действие в PDF, когда оно будет создано. Код я использую, чтобы создать это:Выход с выходом PDF со встроенным скриптом VBA JavaScript

DoCmd.OutputTo acOutputReport, "H&B Stock Research", acFormatPDF, strPathAndFile, False 

Все сайты я исследуемые показать вам, как выполнить добавление сценария/действие, хотя Acrobat GUI. Но я хочу попробовать прогматически вставить его через VBA в Access. Причина этого заключается в том, что этот файл создается каждые 2 минуты, и обновляется примерно 50 копий.

+0

Или, будет ли известный метод с использованием VBScript, чтобы придать свойства опубликовать вывод VBA? –

+0

, вы можете достичь этого, если у вас есть 2 папки, одна для вашей папки вывода вывода и одна для просмотра пользователем. Выведите pdf-файл в «главную папку», а затем скопируйте последнюю копию в папку пользователя каждые 2 минуты (не забудьте закрыть, если в этой папке открыты какие-либо PDF-файлы). Недостаток ... вам нужно скопировать и вставить код VBA из папки в папку – SunRay

+0

@raymondSee Я должен был уточнить. У меня уже есть такая настройка. У меня есть файл 'Batch', который определяет день и время, и если он находится в правильном диапазоне, он выполняет файл' accbd'. 'DB' экспортирует' PDF', который затем '' Batch' выполняет сценарий 'VBS' с копиями, переименовывает и перемещает файлы. Я смотрю, как я могу автоматически изменить «PDF» так, чтобы они закрывались через некоторое время после их открытия. –

ответ

0

Я бы сохранил операционный код в одном месте для лучшего обзора. Сказав это, я бы расширил вашу текущую функцию VBA, чтобы проверить, открыт ли файл и если он открыт дольше 2 часов, и доступна новая версия для копирования. Закройте открытый файл и скопируйте новейшую версию.

Таким образом, вы получите полный контроль над копированием новейшей версии и сможете управлять своим кодом в одном месте.

Предполагаю, что у вас уже есть функция, чтобы проверить, открыт ли PDF. добавление этого кода поможет вам прекратить открытый файл.

Private Declare Function FindWindow Lib "user32" _ 
    Alias "FindWindowA" _ 
    (ByVal lpClassName As String, _ 
    ByVal lpWindowName As String) As Long 

    Private Declare Function PostMessage Lib "user32" _ 
    Alias "PostMessageA" _ 
    (ByVal hwnd As Long, _ 
    ByVal wMsg As Long, _ 
    ByVal wParam As Long, _ 
    ByVal lParam As Long) As Long 

    'Constants that are used by the API 
    Const WM_CLOSE = &H10 

    Dim mHwnd As Long 
    mHwnd = FindWindow(vbNullString, mFileName & " - Adobe Reader") ' application title 

    If IsWindow(mHwnd) = 1 Then ' or just If mHwnd Then 
     'Send termination signal 
     ' you can also capture the return value from postmessage to understand errors. 
     PostMessage mHwnd , WM_CLOSE, 0&, 0& ' 
     Debug.print "File was open but closed: " & mFileName 
    End If 
.. continue with your copy function 

увидеть это: https://support.microsoft.com/en-us/kb/176391

+0

Интересно. Будет ли способ вложить это в мой скрипт VBS, который копирует и имена? Или это будет справедливо только в VBA дБ? –

Смежные вопросы