Excel VBA Workbook.ChangeFileAccess

我在使用VBA更改Excel工作簿上的文件访问模式时遇到问题。 我正在使用Office 2010。

我希望能够根据需要在只读模式和读写模式之间切换。 但是,似乎将工作簿从读/写更改为只读,然后再次返回,如下面的代码在尝试访问工作簿对象的任何成员时会导致自动化错误。

Public Sub example() Dim w As Workbook 'open workbook with write access Set w = Workbooks.Open("example.xlsx", ReadOnly:=False) Debug.Print w.Name 'sucessfully accesses members of w 'change file access to read only w.ChangeFileAccess XlFileAccess.xlReadOnly Debug.Print w.Name 'successfully accesses members of w 'change file access back to read/write w.ChangeFileAccess XlFileAccess.xlReadWrite Debug.Print w.Name 'fails to access members of w with automation error End Sub 

我不明白为什么是这样。 显然,完全可以以只读方式打开工作簿,将其更改为读写,然后继续使用该对象。 为什么这种情况不同? 我可以在MSDN上找不到这种行为。
http://msdn.microsoft.com/en-us/library/ff193344.aspx

是否有可能改变文件访问模式,因为我正在尝试做?

我想你已经用Excel改变了读/写状态的方式来达到一个有趣的目的。 为了将工作簿从只读切换到读/写,Excel将closures该工作簿并再次打开它。 在这个过程中,你的对象引用会变成奇怪的东西。 如果您添加该行:

  Set w = Workbooks("example.xlsx") 

在你将ChangeFileAccess改为xlReadWrite之后,它又重新振作起来,但这并不完全理想。

克里斯