使用脚本嵌入VBA JavaScript访问输出PDF

时间:2016-02-11 13:56:51

标签: javascript vba ms-access pdf access-vba

作为一名非传统程序员,我倾向于以不同的视角看待事物。这恰好是其中一次。我有一个accdb,目前每2分钟运行并输出PDF个文件。当有人打开其中一个文件时,新的PDF将覆盖旧的 。在这种情况下,它会跳过打开的文件,2分钟后重新尝试。我遇到的问题是打开这些PDF的一些用户,最小化它们并忘记它们,在某些情况下,不允许文件更新数天​​,甚至数周。我想要做的是在打开几个小时后嵌入一个工作动作来关闭文件。我发现了如何做到这一点enter link description here我已经对它进行了测试,并且它有效。我遇到的问题是我需要通过VBA以某种方式将该动作嵌入PDF中。我用来创建它的代码是:

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

我研究过的所有网站都向您展示了如何通过Acrobat GUI完成添加脚本/操作。但我想尝试在Access中通过VBA进行预测。原因是该文件每2分钟生成一次,并且大约有50个副本被更新。

1 个答案:

答案 0 :(得分: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