Excel VBA Workbook.ChangeFileAccess

Excel VBA Workbook.ChangeFileAccess

问题描述:

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

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

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关闭该工作簿并再次打开它。在这个过程中,你的对象引用会变成奇怪的东西。如果您添加一行:

Set w = Workbooks("example.xlsx") 

后您ChangeFileAccess到xlReadWrite然后再次心动了,但它不完全理想。

克里斯

+0

这肯定的作品,但你说的没错这是很不理想 - 在我实际的代码我有没有在那里我改变状态的时间点方便散落引用。此外,如果您使用Workbooks.Open以只读方式打开工作簿,然后将文件访问权限更改为读取,则引用保持有效。 – 2011-02-17 20:59:51