Проверьте, защищен ли файл Excel паролем - PullRequest
1 голос
/ 20 апреля 2010

Я пытаюсь открыть файл Excel (xlsm) через VBA. Он может быть защищен или не защищен (известным) паролем. Я использую этот код:

On Error Resume Next
Workbooks.Open filename, Password:=user_entered_pw
opened = (Err.Number=0)
On Error Goto 0

Теперь это работает нормально, если в книге есть пароль. Но если он не защищен, его нельзя открыть. По-видимому, это ошибка в XL2007, если также включена активная защита структуры книги. (http://vbaadventures.blogspot.com/2009/01/possible-error-in-excel-2007.html). На старом XL2003, если ввести пароль, откроется как незащищенный, так и защищенный паролем файл.

Я пытался:

Workbooks.Open filename, Password:=user_entered_pw
If (Err.Number <> 0) Then workbooks.open filename

Это работает для незащищенных и защищенных файлов. Однако, если пользователь вводит неправильный пароль, он запускается во второй строке и вызывает запрос «введите пароль», который мне не нужен.

Как обойти это?

Ответы [ 2 ]

1 голос
/ 28 апреля 2010

Для справки - причина была действительно в защите структуры рабочей книги, которую я открывал. Я мог бы обойти эту проблему, отключив структурную защиту и повторно защитив ее в Workbook_Open () (в защищенной рабочей книге).

Если защита структуры не активна, Workbooks.Open с паролем не завершится ошибкой, даже если пароль отсутствует.

Поскольку я открываю с помощью метода VBA, код VBA уже является доверенным, то есть метод Workbook_Open обязательно будет вызван.

0 голосов
/ 23 апреля 2010
  1. Использовать обработку ошибок 1004 исключительно для этой конкретной проблемы, и On Error Resume Next для всего остального в Sub.

  2. Над заявлением Workbooks.Open filename, Password:=user_entered_pw также добавьте еще один оператор строки без аргумента пароля.

  3. Если они (или их комбинация) не работают, попробуйте поискать плоский код .xlsm в Блокноте для любого намека на то, что защищенный PW файл отличается на этом уровне от того, который отсутствует. Используйте эту информацию в функции предварительного открытия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...