Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.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
在excel上使用vba宏共同编写问题的好办法是什么_Excel_Vba_Autosave - Fatal编程技术网

在excel上使用vba宏共同编写问题的好办法是什么

在excel上使用vba宏共同编写问题的好办法是什么,excel,vba,autosave,Excel,Vba,Autosave,我设计了一个启用宏的工作簿,保存在OneDrive上,显示公司员工的每日花名册和任务列表。工作簿可以添加任务,也可以在可以打开它的多台计算机上将任务标记为已完成。制作此工作簿后不久,我发现协同创作功能与启用宏的工作簿不兼容,因此,如果在多台计算机上打开该文件,则会出现错误消息,指出由于其他人所做的功能更改不受支持,因此无法保存更改。员工们对此感到困惑和恼火,最终每次更改都会保存文件的多个副本,这相当不方便 我了解到,在打开文件时,只需关闭autosave(自动保存)即可避免出现问题。但是,如果在

我设计了一个启用宏的工作簿,保存在OneDrive上,显示公司员工的每日花名册和任务列表。工作簿可以添加任务,也可以在可以打开它的多台计算机上将任务标记为已完成。制作此工作簿后不久,我发现协同创作功能与启用宏的工作簿不兼容,因此,如果在多台计算机上打开该文件,则会出现错误消息,指出由于其他人所做的功能更改不受支持,因此无法保存更改。员工们对此感到困惑和恼火,最终每次更改都会保存文件的多个副本,这相当不方便

我了解到,在打开文件时,只需关闭autosave(自动保存)即可避免出现问题。但是,如果在关闭autosave的情况下打开文件,则任何其他用户都无法打开该文件。文件需要同时在多台计算机上打开并不是完全必要的,但如果有一个解决方案,那就更好了。但需要的是能够切换打开文件的用户,这样,如果有人在计算机上打开文件,而其他人希望在其计算机上打开文件,文件将打开,然后在以前的用户计算机上关闭自动保存,或者关闭该文件,或者只发送一个通知,以防止在其他用户的计算机上出现错误

下面是一些代码块,我试图利用协同创作,使用单元格更改来检测另一台计算机何时打开文件,并使用该事件关闭autosave以防止错误消息显示。您可以猜到,这会遇到这样的问题,即更改单元格的代码本身会在阻止之前触发错误消息“其他人所做的不受支持的功能更改”

Module 1: Public TOmsgShown As Boolean

Private Sub Workbook_Open()
    TOmsgShown = False
    Dim currentuser As Range
    Set currentuser = Sheets(1).Cells(1, 100)
    If IsEmpty(currentuser) = False Then
        userswitch = MsgBox(currentuser.Value & " has currently got this workbook open, and it is only able to be edited by one person at a time. " & _
        "Do you want to take over editing capabilities? No to open this as read-only (any changes made will not be saved) or Yes to force " & currentuser.Value & " to switch to read-only.", vbYesNo)
        If userswitch = vbNo Then
            ThisWorkbook.ChangeFileAccess (xlReadOnly)
            ThisWorkbook.AutoSaveOn = False
        Else
            currentuser.Value = Application.UserName
        End If
    Else
        currentuser.Value = Application.UserName
    End If
    ThisWorkbook.Save
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
     If Sheets(1).Cells(1, 100).Value <> Application.UserName And TOmsgShown = False Then
        Application.DisplayAlerts = False
        ThisWorkbook.AutoSaveOn = False
        ThisWorkbook.ChangeFileAccess (xlReadOnly)
        TOmsgShown = True
        MsgBox (Sheets(1).Cells(1, 100).Value & " has opened up this roster and taken over editing capabilities. You will now be switched to Read-Only mode and can not save any changes made. Re-open this workbook to continue editing.")
        Cancel = True
    End If
End Sub
模块1:公共toms显示为布尔值
私有子工作簿_Open()
tomsgshow=False
Dim currentuser As范围
设置currentuser=Sheets(1)。单元格(1100)
如果IsEmpty(currentuser)=False,则
userswitch=MsgBox(currentuser.Value&“当前已打开此工作簿,一次只能由一个人编辑。”&_
“是否要接管编辑功能?否以只读方式打开此文件(所做的任何更改都不会保存),或是强制“¤tuser.Value&”切换为只读。”,vbYesNo)
如果userswitch=vbNo,则
ThisWorkbook.ChangeFileAccess(xlReadOnly)
ThisWorkbook.AutoSaveOn=False
其他的
currentuser.Value=Application.UserName
如果结束
其他的
currentuser.Value=Application.UserName
如果结束
此工作簿。保存
端接头
私有子工作簿\u在保存之前(ByVal SaveAsUI为布尔值,Cancel为布尔值)
如果Sheets(1).Cells(1100).Value Application.UserName和tomsgShowed=False,则
Application.DisplayAlerts=False
ThisWorkbook.AutoSaveOn=False
ThisWorkbook.ChangeFileAccess(xlReadOnly)
tomsgshow=True
MsgBox(Sheets(1).Cells(1100).Value&“已打开此花名册并接管编辑功能。您现在将切换到只读模式,无法保存所做的任何更改。请重新打开此工作簿以继续编辑。”)
取消=真
如果结束
端接头

是否可以使用任何不会触发错误的vba事件使此方法正常工作,或者,是否有一种方法可以使用代码直接处理错误消息,这样它就不会不必要地显示和提示员工保存副本文件?

我将为每个从主工作簿馈送的员工提供一份工作簿。一旦他们结束工作,按下一个按钮,将在几秒钟内将他们的更改保存到主工作簿中,这样两个用户试图同时保存的问题就很少了……如果您收到“不受支持的功能”消息,这并不是因为它“启用了宏”。这是因为它有不受支持的功能。解决了这个问题,问题就会消失。我花了好几天的时间试图用谷歌搜索这个错误,但没有发现太多,有什么不受支持的功能的例子吗?我运行的任何宏,无论多么简单,似乎都是一个“不受支持的功能”,因为它会导致错误。同样感谢Damian的想法,最后我做到了,每个打开文件的人都会将其作为新副本打开,将他们所做的所有击键和更改记录到一个单独的文档中,该文档记录每个副本中的差异,然后能够以避免冲突和覆盖数据的方式将这些更改放回主文档中。代码有点复杂,但它工作得很好,所以这是一个很好的解决方案。我会为每个员工提供一份来自主工作簿的工作簿。一旦他们结束工作,按下一个按钮,将在几秒钟内将他们的更改保存到主工作簿中,这样两个用户试图同时保存的问题就很少了……如果您收到“不受支持的功能”消息,这并不是因为它“启用了宏”。这是因为它有不受支持的功能。解决了这个问题,问题就会消失。我花了好几天的时间试图用谷歌搜索这个错误,但没有发现太多,有什么不受支持的功能的例子吗?我运行的任何宏,无论多么简单,似乎都是一个“不受支持的功能”,因为它会导致错误。同样感谢Damian的想法,最后我做到了,每个打开文件的人都会将其作为新副本打开,将他们所做的所有击键和更改记录到一个单独的文档中,该文档记录每个副本中的差异,然后能够以避免冲突和覆盖数据的方式将这些更改放回主文档中。这对代码来说有点复杂,但它工作得很好,所以它是一个很好的解决方案。