Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用嵌入脚本的VBA JavaScript访问输出PDF_Javascript_Ms Access_Pdf_Vba - Fatal编程技术网

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

使用嵌入脚本的VBA JavaScript访问输出PDF,javascript,ms-access,pdf,vba,Javascript,Ms Access,Pdf,Vba,作为一名非传统程序员,我倾向于从不同的角度看待事情。这正是其中一次。我有一个accdb,当前每2分钟运行一次并输出PDF文件。新的PDF会覆盖旧的,除非有人打开了其中一个文件。在这种情况下,它将跳过打开的文件,并在2分钟后重新尝试。我遇到的问题是,一些打开这些PDF的用户将它们最小化并忘记它们,在某些情况下,在几天甚至几周内不允许更新文件。我想做的是嵌入一个工作动作,在文件打开几个小时后关闭它。我发现了如何做到这一点,我已经测试了它,它是有效的。我的问题是,我需要通过VBA,在创建PDF时将该操

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

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

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

我会将操作代码放在一个地方,以便更好地查看。话虽如此,我将扩展您当前的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

请参见:

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