我在VBA中为Word 2013构建了一个自定义BuildingBlock管理系统,使用户可以更方便地对BuildingBlocks进行分类,过滤和使用。
这些块存储在.dotm
模板文件中,该文件附加到.docm
文件中,其中包含管理系统代码。后者的内容在全球范围内不时更新,每个用户本地副本也可以包含单独的内容。所有用户都应该能够创建自动可供所有其他人使用的新块。此外,应该可以随时(在线,离线)使用本地块,仅用于创建/删除需要网络连接的块。
这是试图解释连接的图形:
我的方法是在本地工作文件的每次打开时,在本地启动任何更改之前,将存储文件从网络复制到本地。更改后,网络文件会更新。这样,其他用户的更改最有可能不会被覆盖(仅当它们同时发生时),并且所有用户都拥有最新的块集合。
问题:
我无法覆盖正在使用的文件 - 因为工作文件引用了.dotm
块存储文件,它会在后台打开。暂时取消模板也不起作用:我尝试使用
ActiveDocument.AttachedTemplate = ""
但这是关键不稳定的,不会在我测试的系统上处理(不同的配置)。我不明白为什么,但我不能依赖这样的解决方案。
所以这是我的问题: 你知道这样做的方法吗?有没有最佳做法?
我很欣赏任何提示。
答案 0 :(得分:0)
对于对此主题感兴趣的任何人:我必须为此创建一个解决方法。
存储构建块的模板需要关闭才能被覆盖,所以我写了一个小的批处理脚本,在工作文件关闭后进行更新。要返回上一个操作或最终确定它,批处理文件会创建一个带有交换参数的临时文本文件,而交换参数又可以在打开的工作文件中读取。这是批处理文件:
@echo off
:: Batch file for updating the local libraries [referenced as library and cat files in the following]
:: Parameters:
:: %1 - caller file path
:: %2 - update scenario
:: %3 - local tool dir path
:: %4 - library file name
:: %5 - cat file name
:: %6 - network library dir path
:: %7 - tooldata folder name
SET n=0
SET f=0
IF "%~1"=="" (
echo No arguments passed.
Goto NoArguments
)
:: Build local and remote paths to the libraries
SET LocalLib=%~3%~4
SET LocalCat=%~3%~5
SET NetworkLib=%~6%~4
SET NetworkCat=%~6%~5
:: Wait for a maximum of 16 sec until the local library gets released.
:: If its still in use afterwards, abort the copy actions.
:Loop
SET /A n=n+1
IF %n% EQU 10 (
Goto FileNotClosed
) ELSE (
2>nul (
>>%LocalLib% echo off
) && (SET f=1)
IF %f% EQU 0 (
Ping 1.1.1.1 -n 2 -w 1 | find /V "Ping" > nul
Goto Loop
) ELSE (
Goto StartCopy
)
)
:StartCopy
:: Calling document is closed so it should be save to copy the network libraries to the local destination
xcopy %NetworkLib% %LocalLib% /y /q
xcopy %NetworkCat% %LocalCat% /y /q
:FileNotClosed
:: Finally write results of the actions to a xargs.txt file
@echo scenario=%~2>"%~3%~7\xargs.txt"
IF %f% EQU 0 ((@echo success=0)>>"%~3%~7\xargs.txt") ELSE ((@echo success=1)>>"%~3%~7\xargs.txt")
:: Reopen the caller file
%1
:NoArguments
此解决方案出现的问题是,关闭文件时,工作文件中创建的任何数据都将丢失。这就是为什么我还需要将任何用户表单/构建块数据存储在其他临时文件中的原因。
例如,创建新构建块现在可以按如下方式工作:用户在工作文件对话框中输入所有必要信息。完成后,数据将保存在临时文件中,updater.bat将启动并关闭工作文件。更新程序复制最新文件并重新启动工作文件,该文件从besaid .txt文件读取更新结果,完成创建,将本地文件重新上载到网络并清理混乱。