在活动用户数据input到工作表之前,如何使用他人的更改更新共享工作簿?

我有一个共享的macros启用工作簿进行测验。 我可以selectconfiguration可以通过计算机名称访问测验的用户。 一切工作正常。 不过,我想介绍一个function来logging工作簿中完成的主要事情。 用户不会手动input任何内容到单元格中。 所有条目都使用用户forms。

我做了一个子,每次用户执行一个操作,我需要捕获运行。 当单个用户处于活动状态时,代码就像魅力一样。 多个用户同时访问该文件时,会发生此问题。

问题是,用户显示一个提示,以selectclosures工作表取胜。 我不想要这样的事情发生。 无论如何,可以删除提示,并保存所有的更改。

有没有什么解决方法。 下面是我现在的代码。

Sub Actions() QA_Quiz_Master.Save Application.ScreenUpdating = False UN = Evaluate("=UserNameWindows()") QuizN = Sheet4.Range("F2").Value totlog = Log.Range("A1048576").End(xlUp).Row + 1 Select Case Action Case "Open" Log.Range("C" & totlog).Value = "Accessed" Case "Start" Log.Range("C" & totlog).Value = "Started Quiz" Case "Submit" Log.Range("C" & totlog).Value = "Submitted Quiz" Case "AdminContact" Log.Range("C" & totlog).Value = "Contacted Admin" Case "AccessRequest" Log.Range("C" & totlog).Value = "Sent Access Request" Case "Publish" Log.Range("C" & totlog).Value = "Published Quiz" Case "Republish" Log.Range("C" & totlog).Value = "Republished Quiz" Case "Withdraw" Log.Range("C" & totlog).Value = "Withdrew Quiz" Case "AnsPublish" Log.Range("C" & totlog).Value = "Published Answers" End Select Log.Range("A" & totlog).Value = UN Log.Range("B" & totlog).Value = QuizN Log.Range("D" & totlog).Value = Now() Log.Columns("A:D").EntireColumn.AutoFit Application.DisplayAlerts = False QA_Quiz_Master.Save Application.ScreenUpdating = True End Sub 

经过一番调查,我自己解决了这个问题。 我只需要在子的开头添加下面的代码

 If ActiveWorkbook.MultiUserEditing Then QA_Quiz_Master.AcceptAllChanges QA_Quiz_Master.Save End If 

当您将工作簿设置为“共享”时,请查看“高级”选项卡。 默认情况下,它会在文件保存时更新更改,但您可以select让它每x分钟自动更新更改。 您也可以select是否要Excel来询问哪些更改成功,或者是否要自动保存新更改。

共享工作簿是一场噩梦! 应该总是避免使用它们。 几年前,当我担任Ops经理时,我意识到了这一点。 我希望我的经理在一天结束时更新一个共享的报告,并相信我是一场灾难。

这是一个替代scheme。

使用Excel用户窗体作为前端(即,如果您需要使用Excel)并使用Access数据库作为后端。 如果Excel不是一个问题,那么将所有东西移植到MS Access。 我看到你在这里进行测验。 MS Access在这里是一个更好的select。

如果你想追求上述的想法,那么请让我知道,我可以详细解释:)

我用来收集数据的其他select是在INTRANET上显示一个网页,并将结果存储在Access / SQL数据库中。