VBA Excel проверка орфографии для защищенной книги - PullRequest
1 голос
/ 26 февраля 2020

Я хотел бы запустить автоматический c Проверка орфографии для моей книги Excel.

Ранее я использовал метод, описанный в этом запросе:

Проверка орфографии листа Excel в VBA

Кажется, все в порядке, хотя в самом конце я получаю сообщение об ошибке:

Ошибка времени выполнения '1004': Проверка CheckSpelling класса Range завершилась неудачно

Однако моя проверка орфографии выглядит как выполненная, поскольку у меня больше нет таких ошибок. К сожалению, это довольно неловко, потому что я не могу запустить другой код VBA в своей книге, так как отладчик показывает ошибку.

Я нашел код, соответствующий проверке орфографии защищенного листа:

https://www.computergaga.com/blog/spell-check-a-protected-excel-worksheet/

и, наконец, я подготовил свой собственный код, включающий их два:

 Sub Spellcheck3()
 For Each sh In Worksheets
 Sheets(sh.Name).Cells.Unprotect "excel"
 ActiveSheet.CheckSpelling
 Sheets(sh.Name).Cells.Protect "excel"
 Next
 End Sub

К сожалению, я получаю ошибку: Объект не поддерживает это свойство или method.

Строка отладки грубая:

   Sheets(sh.Name).Cells.Unprotect "excel"

Возможно, мне следует настроить таргетинг на некоторый набор ячеек на каждом листе согласно следующему запросу: Excel - VBscript для Проверка орфографии

Я хотел бы иметь правильную проверку орфографии с комментарием в конце, чтобы все было завершено правильно. У меня есть несколько ячеек, защищенных в моей книге, и поэтому появляется отладчик.

1 Ответ

1 голос
/ 26 февраля 2020

Обратите внимание, что ActiveSheet - это не тот лист, который вы снимаете с защиты Sheets(sh.Name) и Cells как метод без .Unprotect, поэтому вы получаете ошибку

Объект не поддерживает это свойство или метод.

Это должно быть

Sub Spellcheck3()
    For Each sh In Worksheets
        sh.Unprotect "excel"
        sh.CheckSpelling
        sh.Protect "excel"
    Next sh
End Sub

Избегайте использования ActiveSheet любой ценой (см. также Как избежать использования Select в Excel VBA ) .

Также обратите внимание, что Sheets(sh.Name) немного излишне. Вы пытаетесь получить имя sh.Name листа sh, чтобы затем получить лист с таким именем Sheets(sh.Name), но у вас уже был этот лист всего за sh.

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