如何防止多个用户编辑同一Excel文件?
无论何时使用特定的Excel文件,我都希望阻止其他人编辑它。 ie.“此文件目前由John Dow编辑,现在将关闭” 我在找一些简单的东西。 有什么想法吗 谢谢,,如何防止多个用户编辑同一Excel文件?,excel,vba,Excel,Vba,无论何时使用特定的Excel文件,我都希望阻止其他人编辑它。 ie.“此文件目前由John Dow编辑,现在将关闭” 我在找一些简单的东西。 有什么想法吗 谢谢,, D.我要补充一个答案,我必须说这个答案远不是完美的(公然试图避免因为试图做一些不必要的事情而被否决)。 我只是想看看你是否可以提取打开它的人的名字——毕竟,当你第一次打开工作簿时,它通常会给出锁定它进行编辑的人的名字 打开Excel文件时,会在同一文件夹中创建一个隐藏锁定文件。锁定文件的名称与原始文件相同,并在文件名前面附加了~$。
D.我要补充一个答案,我必须说这个答案远不是完美的(公然试图避免因为试图做一些不必要的事情而被否决)。
我只是想看看你是否可以提取打开它的人的名字——毕竟,当你第一次打开工作簿时,它通常会给出锁定它进行编辑的人的名字 打开Excel文件时,会在同一文件夹中创建一个隐藏锁定文件。锁定文件的名称与原始文件相同,并在文件名前面附加了
~$
。我发现您无法使用VBA
FileCopy
复制锁定文件,因为您获得了权限被拒绝
错误,但您可以使用FileSystemObject
CopyFile
我的方法背后的思想是复制锁文件并将其更改为文本文件。然后,您可以从中提取用户名,并将其与当前用户名进行比较——如果不同,则报告并关闭该文件
注意-我不会在项目中使用此选项,因为它似乎有几个地方可能会出现问题,Excel通常会告诉您其他人已经打开了它。这更像是一个编码练习
Private Sub Workbook_Open()
Dim ff As Long
Dim sLockFile As String
Dim sTempFile As String
Dim oFSO As Object
Dim XLUser As String, LoggedUser As String
Dim fle As Object
sLockFile = ThisWorkbook.Path & Application.PathSeparator & "~$" & ThisWorkbook.Name
sTempFile = Replace(sLockFile, "~$", "") & "tmp.txt"
'Create copy of lock file as a text file.
Set oFSO = CreateObject("Scripting.FileSystemObject")
oFSO.CopyFile sLockFile, sTempFile, True
'Read the first line from the text file.
ff = FreeFile()
Open sTempFile For Input Lock Read As #ff
Line Input #1, XLUser
Close ff
'Remove the current user from the text.
'Need to check this so that it doesn't close because it sees the current user name.
XLUser = Replace(XLUser, Application.UserName, "")
'Extract name from text string.
'There is a double space in the InStr section.
'The double exclamation mark is a single character - I don't know the code though.
'Unicode U+0203C I think.
XLUser = Replace(Left(XLUser, InStr(XLUser, " ") - 1), "", "")
'Remove hidden attributes so temp file can be deleted.
Set fle = oFSO.GetFile(sTempFile)
fle.Attributes = 0
Kill sTempFile
'If there's still text then it's a user name - report it and close.
If Len(Trim(XLUser)) > 0 Then
MsgBox "Workbook is already open by " & XLUser
ThisWorkbook.Close SaveChanges:=False
End If
End Sub
尽管如此,这段代码可能更安全:
Private Sub Workbook_Open()
If ThisWorkbook.ReadOnly Then
MsgBox "Is opened in read only.", vbOKOnly
ThisWorkbook.Close SaveChanges:=False
End If
End Sub
默认情况下,Excel是单用户的-只要您没有将其设置为共享工作簿,第二个用户就会打开该文件的只读版本。我不认为你可以让其他人打开它,但你可以检查它是否以只读方式打开,如果是,则关闭?也许你可以在这里找到一些有用的东西:非常感谢你的帮助!