【问题标题】:Access Output PDF with Script Embeded VBA JavaScript使用嵌入脚本的 VBA JavaScript 访问输出 PDF
【发布时间】:2016-05-22 08:17:23
【问题描述】:

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

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

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

【问题讨论】:

  • 或者,是否有一种已知的方法使用 VBScript 在 VBA 输出后注入属性?
  • 如果您有 2 个文件夹位置,一个供您访问输出文件夹,一个供用户查看,您也许可以实现这一点。将 pdf 输出到“主文件夹”,然后每 2 分钟将最新的副本复制到用户文件夹(如果该文件夹中打开了任何 pdf,请记住关闭)。缺点是...您必须使用 VBA 代码从一个文件夹复制和粘贴到另一个文件夹
  • @raymondSee 我应该澄清一下。我已经有这样的设置。我有一个标识日期和时间的Batch 文件,如果它在正确的范围内,它会执行一个accbd 文件。 dB 导出PDFBatch 文件然后执行VBS 脚本,复制、重命名和移动文件。我正在寻找如何自动更改PDF,以便它们在打开后一段时间后关闭。
  • 我认为您可以使用已安装 Acrobat 当前版本的 Acrobat API。这可以通过在您的 VBA 项目中添加对 Acrobat API 的引用来完成。

标签: javascript ms-access pdf vba


【解决方案1】:

我会将操作代码保存在一个位置以便更好地进行概览。话虽如此,我会扩展您当前的 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

【讨论】:

  • 有趣。有没有办法将它嵌套到我的复制和命名的 VBS 脚本中?还是这仅在 dB 的 VBA 中有效?
猜你喜欢
  • 2012-09-03
  • 2022-09-30
  • 2012-11-26
  • 2023-03-24
  • 1970-01-01
  • 2015-06-16
  • 2021-09-18
  • 1970-01-01
  • 2013-11-19
相关资源
最近更新 更多