一些背景知识:我构建了一个共享工作簿,这个工作簿在同时添加新行中的项目时遇到了很多保存冲突。
通过宏完成添加新行信息的过程,因此我创建了一个新版本,其中宏在添加信息之前保存工作簿,因此停止将两组数据放入其中行。
我的问题:保存文件确实会降低宏的速度,因为文件大约是2 MB。
我的问题:有没有办法加快保存过程,或者只是更新工作簿与其他人的更改以节省时间?
更新共享工作表的宏文件有另一个主要目标。 根据本地excel文件的数据,我们使用宏来生成报告的标准文本。
根据共享工作簿中的标志,用户检查是否已报告问题。
此宏也会被4个或更多人同时使用,从而导致冲突。
答案 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>
这两种解决方案都容易受到竞争条件的影响。