Как исправить синтаксическую ошибку компиляции в первой строке моего кода

#excel #vba

#excel #vba

Вопрос:

Я пытаюсь использовать некоторый базовый код, чтобы заблокировать все мои ячейки с формулами паролем.

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

 Sub ProtectFormulas()
    Dim strPassword As String
    With ActiveSheet
    .Unprotect
    .Cells.Locked = False
    .Cells.SpecialCells(xlCellTypeFormulas).Locked = True
    .Protect AllowDeletingRows:=True
    strPassword = InputBox(“Please enter the password (optional)”
    ActiveSheet.Protect Password:=strPassword
End With
End Sub
 

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

Комментарии:

1. Чтобы было ясно, вы получаете сообщение об ошибке Dim strPassword As String ? Какую ошибку вы получаете?

2. strPassword = InputBox(“Please enter the password (optional)” не имеет закрывающей круглой скобки для поля ввода.

3. Кроме того, убедитесь, что вы НЕ используете открывающие / закрывающие двойные кавычки в строке. Просто используйте простую двойную кавычку: strPassword = InputBox("Please enter the password (optional)"

4. (@PeterT — не забудьте закрывающую скобку.) Также примечание к OP — если это необязательно, я думаю , если пользователь введет «Отмена» или просто нажмет «Ввод» в поле ввода, не получит ли он технически пароль, это будет просто пустое место? Может потребоваться добавить элемент управления like , If strPassword <> "" Then ActiveSheet.Protect Password=strPassword .

5. @BruceWayne пустая строка — это единственный пароль, который я когда-либо использовал для защиты рабочих листов =) … все остальное в любом случае будет сорвано через несколько секунд, если это не просто жестко запрограммировано прямо в коде VBA.

Ответ №1:

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

Комментарии:

1. Я настоятельно рекомендую не добавлять резюме рядом с верхней строкой. Это скроет ошибки и, вероятно, приведет к большему количеству головных болей, чем «решает».