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
Excel 更改工作簿vba的访问模式_Excel_Vba - Fatal编程技术网

Excel 更改工作簿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

我正在使用vba,我想知道如何更改在读/写模式下以只读模式打开的工作簿的访问模式,然后继续执行其他说明。 我设法改变了访问模式,只是它没有按照指令执行以下内容。 多谢各位

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

  • 另一个建议。。。请阅读,并尝试将此代码保存在其中,这样您就可以通过定义适当的引用来高效地使用它
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
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
将永远不会显示。此外,除非此代码位于