Код VBA для защиты листов и отображения / скрытия кнопок

-1

У меня есть простой код VBA, который запускается каждый раз, когда открывается мой файл Excel, и он отлично работал годами. Через несколько недель он перестал работать. Цель состоит в том, чтобы определенные ячейки на каждом листе блокировались при каждом открытии файла Excel, и чтобы была кнопка, которая, если я нажму на, разблокирует все сразу.

Теперь, когда я открываю файл Ecxel, я получаю это сообщение:

введите описание изображения здесь

Это на французском языке и означает: ошибка компиляции, метод члена или данные не могут быть найдены

Затем я говорю ОК, и он открывает режим отладки: введите описание изображения здесь

Наконец, когда я захожу на sheet36 (это моя сводная страница, на которой появляется кнопка разблокировки листов) и нажимаю на кнопку, которая снимает защиту со всех листов, я ввожу пароль и получаю ошибку 1004: введите описание изображения здесь

На английском языке: Ошибка выполнения «1004»: неверный пароль. Убедитесь, что ключ CAPSLOCK не активирован и что вы используете правильный регистр.

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

Предполагается, что определенные ячейки на всех листах будут заблокированы при открытии файла, и на листе 36 есть одна кнопка, которая разблокирует все с помощью пароля. Но в выключенном состоянии на листе 36 появляется только «кнопка снятия защиты».

Любая помощь очень ценится, спасибо.

Johanna
источник
Первая ошибка в том, что вы не объявили shпеременную, а вторая, если вы можете очистить то, что есть Feuil36!! Ra
Раджеш С
1
Желтая выделенная строка - это не ошибочная строка, это строка, которая должна быть выполнена, но подпрограмма должна быть скомпилирована первой. Компиляция не удалась, потому что CommandButton2в листе Feuil36не может быть найдено.
Том Брунберг
Хорошо, спасибо вам обоим, так что я думаю, что я полный нуб на VBA, потому что я не понимаю, что вы рекомендуете мне делать ... что я должен делать именно для того, чтобы это исправить?
Йоханна
Выучи VBa. Я знаю, это звучит как наивный ответ, но начни сейчас. Кроме того, вы уверены, что это правильный пароль
Дейв
@Johanna ,, вы получаете ошибку, потому что синтаксис команды неверен. Посмотрите мой пост, я предложил несколько методов, а также правильный способ (синтаксис команды), чтобы скрыть и показать кнопку.
Раджеш

Ответы:

0

Чтобы избавиться от ошибки, нужно сделать следующее:

Sheets("Feuil36").Shapes("CommandButton2").Visible = False

Как это устроено:

  1. Нажмите, Alt+F11чтобы открыть редактор VB.
  2. В меню «Вид» найдите и нажмите « Немедленное окно» .
  3. Либо напишите или Copy & Pasteвыше написанный код Immediate Windowи закончите с Enter.

Или же

Вы также можете использовать макрос.

Sub ButtonHideUnHide()
Dim ws As Worksheet
Set ws = feuil36
With ws
    .Shapes("CommandButton2").Visible = msoFalse
    .Shapes("CommandButton1").Visible = msoTrue

End With
End Sub

Примечание. Названия событий, листов и командных кнопок доступны для редактирования.

Раджеш С
источник
Привет Раджеш, спасибо за код, хотя он, кажется, не делает то же самое. Защиту паролем необходимо запускать каждый раз при открытии файла. Мне не нужно нажимать на кнопку, чтобы защитить листы. Кроме того, даже если я нажму кнопку 1, чтобы снять защиту со всех моих листов, кнопка 2, чтобы защитить их все, никогда не появится снова. Button1 просто остается там все время. Есть идеи почему?
Йоханна
@Johanna, скриншот, который вы прикрепили с вопросом, не о ЗАЩИТЕ, код отражает то, что вы пытаетесь скрыть / отменить скрытие командных кнопок и ничего. Вы получаете ошибку, потому что синтаксис команды неверен, и это то, что я показал в своем ответе. Лучше отредактируйте вопрос и напишите именно то, что вам нужно !! Ra
Раджеш С
Раджеш, спасибо за ваш ответ. Поэтому я отредактировал текст своего поста, добавив код для защиты и снятия защиты с файла. Вы видите что-то не так в этом? Он не запускается, когда я открываю файл, как это было раньше.
Йоханна
@Johanna, да, в вашем коде есть несколько ошибок ,,, 1. чтобы сделать командную кнопку видимой или скрытой, ME.Commandbutton1 выдает ошибку, если вы не определили ее Me как Лист. Обычно MEиспользуют для USER FORM. 2. То, как вы пытаетесь использовать команду для защиты листа, неверно, так и должно быть wSheet.Protect Password:="Secret".
Раджеш С