使用嵌入脚本的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中有效?