避免在excel共享工作簿中覆盖冲突

时间:2016-03-19 15:35:40

标签: excel-vba macros vba excel

一些背景知识:我构建了一个共享工作簿,这个工作簿在同时添加新行中的项目时遇到了很多保存冲突。

通过宏完成添加新行信息的过程,因此我创建了一个新版本,其中宏在添加信息之前保存工作簿,因此停止将两组数据放入其中行。

我的问题:保存文件确实会降低宏的速度,因为文件大约是2 MB。

我的问题:有没有办法加快保存过程,或者只是更新工作簿与其他人的更改以节省时间?

编辑#1

更新共享工作表的宏文件有另一个主要目标。 根据本地excel文件的数据,我们使用宏来生成报告的标准文本。

根据共享工作簿中的标志,用户检查是否已报告问题。

此宏也会被4个或更多人同时使用,从而导致冲突。

1 个答案:

答案 0 :(得分:0)

似乎可能(不完全清楚)阻止多个用户同时运行宏可以帮助防止出现问题。基于OP的上述评论,这里是实现这一目标的代码。代码将检查Windows进程以查看此宏的另一个实例是否已在运行。显然,这个检查应该是OP脚本中发生的第一件事。

Form

另一个选项是检查Excel文件是否已打开。要运行以下脚本,您需要使用真实文件名替换Option Explicit Function RunningInstancesOfThisScript() Dim colProcesses Dim objProcess Dim lScriptCount RunningInstancesOfThisScript = 0 lScriptCount = 0 ' Get list of running processes using WMI Set colProcesses = GetObject("winmgmts:\\.\root\cimv2").ExecQuery("Select * From Win32_Process") For Each objProcess in colProcesses If (Instr(1, objProcess.Commandline, WScript.ScriptFullName, vbTextCompare) <> 0) Then lScriptCount = lScriptCount + 1 End If Next RunningInstancesOfThisScript = lScriptCount End Function Function IsThisScriptAlreadyRunning() Dim lScriptCount lScriptCount = RunningInstancesOfThisScript() If (lScriptCount < 1) Then ' This should not happen. There should be at least one instance, the current one IsThisScriptAlreadyRunning = False ElseIf (lScriptCount = 1) Then ' The current instance is the only one IsThisScriptAlreadyRunning = False Else IsThisScriptAlreadyRunning = True End If End Function If (IsThisScriptAlreadyRunning() = True) Then MsgBox "Another instance of this script is already running. This instance will now terminate without making any changes. Please try again after a few minutes.", vbExclamation WScript.Quit Else MsgBox "There is no other instance of this script currently running. This instance will now proceed and make the changes needed.", vbInformation End If

<FileName>

这两种解决方案都容易受到竞争条件的影响。