Excel VBA Workbook.ChangeFileAccess - PullRequest
       8

Excel VBA Workbook.ChangeFileAccess

2 голосов
/ 17 февраля 2011

У меня проблемы с изменением режима доступа к файлам в книгах Excel с использованием VBA. Я использую 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

Можно ли переключаться между режимами доступа к файлам, как я пытаюсь сделать?

1 Ответ

2 голосов
/ 17 февраля 2011

Я думаю, что вы попали в интересную ситуацию с тем, как Excel изменяет состояние чтения / записи. Чтобы перевести книгу из режима «только чтение» в режим «чтение / запись», Excel закрывает эту книгу и открывает ее снова. Во время этого процесса ссылка на ваш объект превращается во что-то странно нарушенное. Если вы добавите строку:

  Set w = Workbooks("example.xlsx")

после того, как вы измените AccessFileAccess на xlReadWrite, он снова активизируется, но это не совсем идеально.

Chris

...