Excel 更改工作簿vba的访问模式
我正在使用vba,我想知道如何更改在读/写模式下以只读模式打开的工作簿的访问模式,然后继续执行其他说明。 我设法改变了访问模式,只是它没有按照指令执行以下内容。 多谢各位Excel 更改工作簿vba的访问模式,excel,vba,Excel,Vba,我正在使用vba,我想知道如何更改在读/写模式下以只读模式打开的工作簿的访问模式,然后继续执行其他说明。 我设法改变了访问模式,只是它没有按照指令执行以下内容。 多谢各位 Sub RW() If ThisWorkbook.ReadOnly Then ThisWorkbook.Saved = True ActiveWorkbook.ChangeFileAccess Mode:=xlReadWrite End If MsgBox "ok" End S
Sub RW()
If ThisWorkbook.ReadOnly Then
ThisWorkbook.Saved = True
ActiveWorkbook.ChangeFileAccess Mode:=xlReadWrite
End If
MsgBox "ok"
End Sub
更复杂的代码版本: 查看此处提供的有关函数
.ChangeFileAccess
的信息
Sub RW()
If ThisWorkbook.ReadOnly Then
MsgBox "Access Changed from Read Only to Read/Write"
ThisWorkbook.Saved = True
ThisWorkbook.ChangeFileAccess Mode:=xlReadWrite
Else: MsgBox "No Access Changed"
End If
End Sub
我认为问题应该出在Activeworkbook
&thiswoolk
- 另一个建议。。。请阅读,并尝试将此代码保存在其中,这样您就可以通过定义适当的引用来高效地使用它李>
.ChangeFileAccess
的信息
Sub RW()
If ThisWorkbook.ReadOnly Then
MsgBox "Access Changed from Read Only to Read/Write"
ThisWorkbook.Saved = True
ThisWorkbook.ChangeFileAccess Mode:=xlReadWrite
Else: MsgBox "No Access Changed"
End If
End Sub
我认为问题应该出在Activeworkbook
&thiswoolk
- 另一个建议。。。请阅读,并尝试将此代码保存在其中,这样您就可以通过定义适当的引用来高效地使用它李>
Private Sub Workbook_Open()
If ActiveWorkbook.ReadOnly Then
MsgBox "Access will be changed from Read Only to Read/Write." & _
vbNewLine & "The file will reopen in ReadWrite mode."
ActiveWorkbook.Saved = True
ActiveWorkbook.ChangeFileAccess Mode:=xlReadWrite
Else: MsgBox "No Access Changed"
End If
End Sub
Microsoft在其“Workbook.ChangeFileAccess方法”中指出,当您从只读打开的工作簿切换到读写时,Excel需要从磁盘检索同一工作簿的新副本,从而打开文件的新版本
在这种情况下,您需要在工作簿的On_Open过程中实现代码。由于是这种情况,您需要在执行此过程之前通知用户状态将发生更改
注意:如果有人在通过电子邮件(仅作为示例)或任何其他方式发送工作簿后打开工作簿,而该文件尚未保存在磁盘上,则可能会导致错误
Private Sub Workbook_Open()
If ActiveWorkbook.ReadOnly Then
MsgBox "Access will be changed from Read Only to Read/Write." & _
vbNewLine & "The file will reopen in ReadWrite mode."
ActiveWorkbook.Saved = True
ActiveWorkbook.ChangeFileAccess Mode:=xlReadWrite
Else: MsgBox "No Access Changed"
End If
End Sub
尝试使用F8检查代码,查看代码是否进入条件。如果要将
活动工作簿
更改为此工作簿
,可能是它们引用了不同的工作簿,而您无法看到结果。尝试使用F8检查代码,然后查看代码是否正在输入条件。如果要将您的活动工作簿
更改为此工作簿
,可能是因为它们引用了不同的工作簿,而您无法看到结果。我认为这不会改变任何事情。在“if”块之后,如果您输入更多指令,它将不起作用。仔细看我的代码,在条件之后有一个Msgbox“ok”,这是我的problem@mordiop这是因为ChangeFileAccess
必须重新加载文件才能更改模式。这意味着当前文件在ChangeFileAccess
行关闭,因此此时代码执行立即中止。其余的代码将永远不会运行。因此,ChangeFileAccess
是这段代码能够运行的最后一行。它之后的任何东西都不能运行。这是故意的,不能改变。好吧,我理解。但是,是否有办法管理活页夹的访问竞争?我有五个用户使用它,每个人都有自己的改变。我的想法是以只读方式打开文件,并在关闭时更改读/写访问模式以应用更改。@mordiop Excel不是数据库(可由多个用户同时访问)。您可能需要使用真实的数据库(如SQL)或至少MS Access。@mordiop如果您想让多人处理同一个文件,则需要使用365共享访问功能。或者您创建一个access后端。。。但是如果不知道这些变化是什么,很难知道这是否对你有效。我认为这不会改变任何事情。在“if”块之后,如果您输入更多指令,它将不起作用。仔细看我的代码,在条件之后有一个Msgbox“ok”,这是我的problem@mordiop这是因为ChangeFileAccess
必须重新加载文件才能更改模式。这意味着当前文件在ChangeFileAccess
行关闭,因此此时代码执行立即中止。其余的代码将永远不会运行。因此,ChangeFileAccess
是这段代码能够运行的最后一行。它之后的任何东西都不能运行。这是故意的,不能改变。好吧,我理解。但是,是否有办法管理活页夹的访问竞争?我有五个用户使用它,每个人都有自己的改变。我的想法是以只读方式打开文件,并在关闭时更改读/写访问模式以应用更改。@mordiop Excel不是数据库(可由多个用户同时访问)。您可能需要使用真实的数据库(如SQL)或至少MS Access。@mordiop如果您想让多人处理同一个文件,则需要使用365共享访问功能。或者您创建一个access后端。。。但是,如果不知道更改是什么,就很难知道这是否适用于您。请注意,根据文档,需要重新加载工作簿。这意味着代码执行在ChangeFileAccess
之后立即停止(它关闭工作簿的当前实例以重新加载它),因此此行之后的MsgBox
将永远不会显示。此外,除非此代码位于