【问题标题】:Excel VBA Workbook.ChangeFileAccessExcel VBA 工作簿.ChangeFileAccess
【发布时间】:2013-08-06 01:28:08
【问题描述】:

我在使用 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

是否可以像我尝试的那样在文件访问模式之间进行更改?

【问题讨论】:

    标签: vba excel ms-office


    【解决方案1】:

    我认为您在 Excel 更改读/写状态的方式上遇到了一个有趣的问题。为了将工作簿从只读切换到读/写,Excel 会关闭该工作簿并再次打开它。在这个过程中,你的对象引用变成了奇怪的东西。如果添加行:

      Set w = Workbooks("example.xlsx")
    

    在您将文件访问更改为 xlReadWrite 后,它会再次振作起来,但这并不完全理想。

    克里斯

    【讨论】:

    • 这当然有效,但你说得对,它远非理想——在我的实际代码中,我有散落在各处的引用,在我更改状态时不容易访问。此外,如果您使用 Workbooks.Open 以只读方式打开工作簿,然后将文件访问权限更改为读写,则引用仍然有效。
    • 是的,只有读->读/写方向会导致重新打开。 :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多