我有一个包含宏的 Excel 文档,其中包含信息的输入和更新表单,该文档用作每月数据库,您也可以从中运行报告。
问题是,在使用文档时,有时会同时使用输入和更新选项,从而导致信息丢失。输入和输出都保存在宏的末尾,以最大程度地减少损失,但我想知道是否有办法在运行时检查是否有另一个用户正在使用宏,如果是,则延迟下一个宏运行直到另一个用户用户完成了吗?
最佳答案
我能想到一个方法。从逻辑上讲它应该有效。不过我还没有测试它。
- 创建临时表并将其隐藏
- 当任何人运行宏时,检查该工作表的单元格 A1 是否为空
- 如果为空则运行宏
- 在运行宏之前,写入该单元格,运行宏后,清除另一个单元格的内容
- 按如下所述夹入您的宏代码
代码
Sub Sample()
Dim ws As Worksheet
ThisWorkbook.Save
Doevents
Set ws = ThisWorkbook.Sheets("HiddenSheetName")
If Len(Trim(ws.Range("A1").Value)) = 0 Then
ws.Range("A1").Value = "Macro Starts"
ThisWorkbook.Save
Doevents
'
'~~> Rest of your code goes here
'
ws.Range("A1").ClearContents
ThisWorkbook.Save
Doevents
Else
MsgBox "Please try after some time. There is a macro running... Blah Blah"
End If
End Sub
警告:代码运行后,您将无法撤消更改,因为代码以编程方式保存文件。这些变化是永久性的。在未共享的文件中,您可以通过关闭文件来撤消,而无需保存并重新打开它。
关于vba - 共享 Excel 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38791380/