Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 在将活动用户数据输入工作表之前,如何使用其他人的更改更新共享工作簿?_Vba_Excel - Fatal编程技术网

Vba 在将活动用户数据输入工作表之前,如何使用其他人的更改更新共享工作簿?

Vba 在将活动用户数据输入工作表之前,如何使用其他人的更改更新共享工作簿?,vba,excel,Vba,Excel,我有一个共享的启用宏的工作簿,用于进行测验。我可以选择配置用户,这些用户可以借助计算机名访问测验。一切正常。不过,我想介绍一个功能,用于记录工作簿中完成的主要工作。用户不在单元格中手动输入任何内容。所有条目都使用userforms创建 我制作了一个sub,每当用户执行我需要捕获的操作时,它都会运行。当单个用户处于活动状态时,代码就像一个符咒。当多个用户同时访问该文件时,就会出现此问题 问题是,在关闭工作表时,会提示用户选择要赢得的更改。我不想发生这种事。是否存在可以删除提示并保存所有更改的方法

我有一个共享的启用宏的工作簿,用于进行测验。我可以选择配置用户,这些用户可以借助计算机名访问测验。一切正常。不过,我想介绍一个功能,用于记录工作簿中完成的主要工作。用户不在单元格中手动输入任何内容。所有条目都使用userforms创建

我制作了一个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

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

这里有一个替代方案

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

如果你想实现上述想法,请务必让我知道,我可以详细解释:)


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

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

经过一些研究,我自己解决了这个问题。我只需要在子脚本的开头添加以下代码

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

这个关键的句子毫无意义:“用户在关闭工作表时会看到一个提示,提示用户选择要赢得的更改”。什么是“哪种变化会赢”呢?您在windows中看到的提示是否表示文件正在使用?或者是您的程序提示显示了一些关于“获胜”的消息?@jdh:这是一个提示,表示Excel是否应该接受单元格中您的值或其他用户的值。我也知道共享工作簿是一场噩梦。在我的例子中,所有的功能都很好。唯一的问题是我在这里描述的问题。谢谢你的支持和建议。我不知道MS Access。不过,我一定会努力学习。不幸的是,如果最后一个用户选择。。。因此提出了上述建议。