如何在将活动用户数据输入到工作表之前更新共享工作簿并更改其他工作簿?

时间:2012-01-26 04:58:54

标签: excel vba excel-vba

我有一个用于执行测验的共享宏启用工作簿。我可以选择配置可以借助计算机名称访问测验的用户。一切都很好。但是,我想介绍一个功能来记录工作簿中的主要内容。用户不会手动输入任何内容。所有条目都是使用用户表单制作的。

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

问题是,用户会在关闭工作表时显示选择要获胜的提示。我不希望这种情况发生。无论如何,可以删除提示并保存所有更改。

是否有任何解决方法。下面是我现在的代码。

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

3 个答案:

答案 0 :(得分:5)

经过一番研究,我自己解决了问题。我只需要在子

的开头添加以下代码
If ActiveWorkbook.MultiUserEditing Then
    QA_Quiz_Master.AcceptAllChanges
    QA_Quiz_Master.Save
End If

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

这是另一种选择。

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

如果你想追求上述想法,请告诉我,我可以详细解释:)

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