Ошибка нельзя установить свойство visible класса worksheet

Кнопка «скрыть лист» не активна.

скрин1

Сначала подумал про «очень скрытые листы». Захожу в редактор VBA? в project explorer вижу скрытые листы и пытаюсь поменять свойство видимости но выдает ошибку : «Нельзя установить свойство Visible для класса worksheet»

Скрин2

Прочие свойства листа редактируются ошибка вылетает только на свойстве «visible»
Вот симптомы моей проблемы. Может есть у кого какие соображения?
Данная проблема только в конкретном xlsm файле, в других, параллельно открытых, такой проблемы нет.

Did you have another Excel Workbook opened at the same time when testing it? There’s no explicit reference to the book you’re looking for, so in case you run this code having a workbook where the «Splash» sheet is not available, the macro will try to set all sheets to hidden, which may raise this error.

To simulate it, open a new Excel session and run this macro:

Sub test()

    Dim oSheet As Excel.Worksheet

    For Each oSheet In Worksheets

        oSheet.Visible = xlSheetVeryHidden

    Next oSheet

End Sub

If I’m not barking to the wrong tree, you’ll get the same error.

To solve it, simply add the workbook name into your loop, and it would be like this (obviously, you must ensure that there’s a «Splash» sheet, or the error will arise):

For Each wsSht In Workbooks("Mybook.xlsm").Worksheets
    If Not wsSht.Name = "Splash" Then wsSht.Visible = xlSheetVeryHidden
Next wsSht

Rgds

ХЕЛП!!!!

Доброго времени суток всем.

Помогите!!!

Книга открывается без пароля, но в VBA видно,что пароль есть. Я знаю пароль книги но как его ввести в VBA не знаю.

Листы без пароля. Не могу отобразить Лист №2. На снимках видно, что

скрыть отобразить литы не возможно, поскольку функция «НЕ АКТИВНА». Знаю, что виноват МАКРОС.

Но,что и как делать без понятия. Ни на одном форуме не нашел. Если меняю 0-xlSheetHiden на 1-xlSheetVisible вылазит сообщение:

» Нельзя установить свойство Visible класса Worksheet «.

Заранее благодарен.

Ошибка-1004 в Excel VBA: невозможно установить видимое свойство класса рабочего листа.

С помощью форума Excel я создал форму входа пользователя, в которой у меня есть 5 пользователей. Каждый пользователь может иметь доступ только к закрепленным за ним листам. Это работает нормально. Но теперь я защитил «структуру рабочей книги», чтобы пользователи не добавляли/удаляли листы. Затем я снова вхожу в систему, и вместо отображения формы входа в Excel VBA появляется сообщение об ошибке:

Ошибка-1004 Невозможно установить видимое свойство класса рабочего листа.

При отладке ошибка выделяется в следующих кодах, где свойство visible рабочего листа установлено как «True», «False» или «xlSheetVeryHidden».

Есть ли способ исправить это, чтобы я мог получить доступ к форме входа, как я делал это до защиты паролем «структуры книги»?

5 ответов

Вот еще одна забота по этому поводу.

Вы можете НЕ скрыть ВСЕ рабочие листы в книге. Таким образом, если вы знаете, что у вас будет хотя бы 1 лист, который ВСЕГДА будет виден, исключите его из процесса скрытия.

Была ли у вас открыта другая книга Excel одновременно с ее тестированием? Нет явной ссылки на книгу, которую вы ищете, поэтому, если вы запустите этот код с рабочей книгой, в которой лист «Заставка» недоступен, макрос попытается скрыть все листы, что может вызвать эту ошибку.

Чтобы имитировать это, откройте новый сеанс Excel и запустите этот макрос:

Если я лаю не на то дерево, вы получите ту же ошибку.

Чтобы решить эту проблему, просто добавьте имя книги в свой цикл, и это будет выглядеть так (очевидно, вы должны убедиться, что есть лист «Всплеск», иначе возникнет ошибка):

Обсуждаем вопросы только по Excel VBA
(программирование макросов, скриптов, пользовательских функций и т.п.).
Приветствуются ссылки на ресурсы и справочную литературу по теме.

Вопросы по работе с MS Excel, не относящиеся к программированию, задаем в теме Excel FAQ

Обратите внимание, этот топик для помощи в изучении и использовании VBA. Посему запросы типа «Напишите мне такой-то макрос, я VBA не знаю и знать не хочу» не приветствуются.
Древняя мудрость: «Накорми голодного рыбой и он погибнет, научи его ловить рыбу и ты спасешь его.»(R)

Предыдущие ветки топика: Часть 1

Рекомендации:
Если у Вас есть проблема, не решаемая стандартными средствами Excel (об этом можно уточнить здесь ) или требующая автоматизации, попробуйте для начала записать макрос самим Excel через меню Сервис (Tools) — Макрос (Macro) — Начать запись (Record New Macro). Подробнее здесь. В большинстве случаев получившийся код (Сервис-Макрос-Макросы-Изменить) Вас не удовлетворит, но подскажет, какие объекты-методы-свойства использовать.
Другой Ваш помощник — Просмотр объектов (Object Browser). Ну и встроення помощь (F1), естественно.

Если Вы в тупике, покажите Ваш код (или часть кода) здесь. Если вылазит ошибка, цитируйте ее полностью. Если код слишком большой, используйте тeг [more] .
Используйте отладчик — Breakpoints (F9), Watches (Shift-F9), Steps (F8 и др.) Сильно облегчает поиск ошибок.

Рекомендуется к прочтению:

(для продвинутых)
(eng.) — тематический блог: советы по работе с Excel и прочие материалы
(eng.) — советы, трюки и уловки
(eng.) — весьма оживленный форум по Excel&VBA.
— сайт «Планета Excel», целиком посвященный Excel и всему, что с ним связано.

Set cur_range = Range(Cells(FirstEmptyRow, «A»), Cells(FirstEmptyRow, «Y»))
cur_range = save_range

MsgBox «First Empty in Column A = » & Str(FirstEmptyRow)

выдает ошибку «9» — out of range — на строчке
Set DB_Workbook = Workbooks(«filename.xls»).Worksheets(1)

Цитата:

Set DB_Workbook = Workbooks(«filename.xls»).Worksheets(1)

в данном случае книга должна быть открыта к этому моменту!
Это так?

Суть в том что скрипт вызывается из одного файла, а записывать должен данные в другой
причем специальной вставкой с трансформацией в первую пустую строку
мб через Copy просто сделать?
я уже путаюсь тут во всем)

Добавлено:
FirstEmptyRow = DB_Workbook.UsedRange.Columns(1).SpecialCells(xlCellTypeBlanks).Cells(1).Row
эта штука чет тоже не пашет(( а как ячейки скопировать до сих пор не ясно

Попробовал через автозапись макроса:
Код:

Selection.Find(What:=» «, After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
MatchCase:=False).Activate

Но вызов окна по Ctrl+F не записывается и при запуске макроса сразу осуществляется поиск, в данном примере пробела.

.
Цитата:

Можно попробовать сделать так: запомнить текущую ячейку, узнать значение следующей в столбце.

а это я вообще не понял.. А зачем этот извилистый путь?

Мне кажется, что Вашу задачу решает простенький макрос вида:

Код:

Sub MyFind()
Dim MyText4Find As String
Dim iRange As Range
MyText4Find = InputBox(«Введите строку для поиска»)
Set iRange = ActiveSheet.UsedRange.Find(what:=MyText4Find, After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
MatchCase:=False)
If iRange Is Nothing Then
MsgBox «Текст » & MyText4Find & » на текущем листе не найден!», vbExclamation, «Ошибка»
‘ Exit Sub
Else
iRange.Activate
End If
End Sub

Цитата:

А зачем этот извилистый путь?

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

Цитата:

область поиска можно изменять

В моем случае больше вроде подходит ActiveCell.EntireColumn

Цитата:

Но все равно похоже без дополнительного хоткея или кнопки не обойтись никак.

похоже на то!

Sub СкрытьЯрлычкиЛистов()
ActiveWindow.DisplayWorkbookTabs = False
ActiveWindow.DisplayHorizontalScrollBar = False
ActiveWindow.DisplayHeadings = False
End Sub

но в если зайти в настройки Excel — все можно вернуть обратно — как побороть?

Sheets(2).Visible = xlSheetVeryHidden ‘режим Очень скрытный — лист не виден в окне «Отобразить»
ActiveWindow.DisplayWorkbookTabs = False ‘спрятали закладки
ActiveWorkbook.Protect Structure:=True, Windows:=False ‘защитили структуру

можешь написать полностью как будет выглядеть макрос:
поставить пароль на все листы, на все листы кроме первого, например «Первый», поставить суперскрытый
Sub superprotect()
Dim PWORD As String
PWORD = «xxxxx»
ActiveWorkbook.Protect Structure:=True, Windows:=False ‘защитили структуру
For Each WkSht In Worksheets
WkSht.Protect Password:=PWORD, AllowFormattingRows:=True
WkSht.EnableSelection = xlUnlockedCells
Sheets(2).Visible = xlSheetVeryHidden
ActiveWindow.DisplayHorizontalScrollBar = False
ActiveWindow.DisplayVerticalScrollBar = False
ActiveWindow.DisplayHeadings = False
Next WkSht
End Sub

но что-то ругается на макрос

Логическое выражение — либо True либо False.

Dim PWORD As String, i As Integer, n As Integer
PWORD = «xxxxx»
n = ActiveWorkbook.Sheets.Count
For i = 2 To n
With Sheets(i)
.EnableSelection = xlUnlockedCells
.Visible = 2
.Protect Password:=PWORD, AllowFormattingRows:=True
End With
Next

Sheets(1).Protect Password:=PWORD, AllowFormattingRows:=True
Sheets(1).EnableSelection = xlUnlockedCells

With ActiveWindow
.DisplayHorizontalScrollBar = False
.DisplayVerticalScrollBar = False
.DisplayHeadings = False
End With
ActiveWorkbook.Protect PWORD, true, true

нужно скрыть все ярлыки книги, т.е. один рабочий лист, но без навигации ярлыков

Возвращает или задает значение XlSheetVisibility , которое определяет, виден ли объект.

Синтаксис

выражения. Видимый

выражение Переменная, представляюная объект «Таблица «.

Пример

В этом примере скрывается sheet1.

В этом примере отображается лист 1.

В этом примере видны все листы в активной книге.

В этом примере создается новая таблица, а затем устанавливается ее свойство Видимое для xlSheetVeryHidden. Чтобы сослаться на лист, используйте переменную объекта, newSheet как показано в последней строке примера. Чтобы использовать переменную newSheet объекта в другой процедуре, необходимо объявить ее публичной переменной ( Public newSheet As Object ) в первой строке модуля, предшествующего любой процедуре Sub или Function .

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

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Ошибка времени выполнения VBA 1004 Ошибка, определяемая приложением или объектом

С помощью форума Excel я создал форму входа в систему, в которой у меня 5 пользователей. Каждый пользователь может иметь доступ только к назначенным ему листам. Это нормально работает. Но теперь я защитил «структуру книги», чтобы избежать добавления / удаления листов пользователями. Затем я снова вхожу в систему, и вместо отображения формы входа в Excel VBA появляется сообщение об ошибке:

Ошибка-1004 Невозможно установить видимое свойство класса рабочего листа

Когда я отлаживаю, ошибка выделяется в следующих кодах, где для свойства visible листа установлено значение «True», «False» или «xlSheetVeryHidden».

Private Sub Workbook_Open() Dim wsSht As Worksheet Worksheets('Splash').Visible = True Worksheets('Users').Visible = False For Each wsSht In Worksheets If Not wsSht.Name = 'Splash' Then wsSht.Visible = xlSheetVeryHidden Next wsSht With Worksheets('Splash') .Visible = True .Activate End With frmLogin.Show bBkIsClose = False End Sub 

Есть ли способ исправить это, чтобы я мог получить доступ к форме входа в систему, как это было до введения пароля, защищающего «структуру книги»?

Вот еще одно беспокойство по этому поводу.

Вы можете НЕ скрывать ВСЕ рабочих листов в книге. Таким образом, если вы знаете, что у вас будет хотя бы 1 лист, который ВСЕГДА будет виден, исключите его из процесса скрытия.

Была ли открыта еще одна рабочая книга Excel при ее тестировании? Здесь нет явной ссылки на книгу, которую вы ищете, поэтому, если вы запустите этот код с книгой, в которой лист «Всплеск» недоступен, макрос попытается сделать все листы скрытыми, что может вызвать эту ошибку.

Чтобы смоделировать это, откройте новый сеанс Excel и запустите этот макрос:

Sub test() Dim oSheet As Excel.Worksheet For Each oSheet In Worksheets oSheet.Visible = xlSheetVeryHidden Next oSheet End Sub 

Если я лаю не на то дерево, вы получите ту же ошибку.

Чтобы решить эту проблему, просто добавьте имя книги в свой цикл, и это будет примерно так (очевидно, вы должны убедиться, что есть лист «Всплеск», иначе возникнет ошибка):

For Each wsSht In Workbooks('Mybook.xlsm').Worksheets If Not wsSht.Name = 'Splash' Then wsSht.Visible = xlSheetVeryHidden Next wsSht 

RGDS

  • @Tiago …. Я выполняю цикл For-Each, используя ActiveWorkbook, чтобы получить листы, и все еще получаю эту ошибку. Первоначально я не мог получить доступ к свойству Visible, но теперь получаю это. Есть указатели? (К вашему сведению — Excel 2007)
  • @GoldBishop, попробуйте добавить debug.print wsSht.Name перед предложением if (чтобы распечатать листы, на которых выполняется цикл). Откройте окно отладки (ctrl + G) и посмотрите, правильно ли печатаются имена листов.

Вам придется снимать и повторно защищать код. Обратной стороной является то, что ваш пароль будет в коде.

Private Sub Workbook_Open() Dim wsSht As Worksheet Me.Unprotect 'password' Me.Worksheets('Splash').Visible = True Me.Worksheets('Users').Visible = False For Each wsSht In Me.Worksheets If Not wsSht.Name = 'Splash' Then wsSht.Visible = xlSheetVeryHidden Next wsSht With Me.Worksheets('Splash') .Visible = True .Activate End With frmLogin.Show bBkIsClose = False Me.Protect 'password', True, False End Sub 
  • Я использовал код ur, но он не защищает структуру книги

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

Вот пример:

Sub spork() Dim x As Workbook x.Windows.Item(1).Visible = False End Sub 

Теперь Excel открывает файл без видимого рабочего листа.

Tweet

Share

Link

Plus

Send

Send

Pin

Понравилась статья? Поделить с друзьями:
  • Ошибка некорректный номер счета
  • Ошибка неполадки подключения или неверный код mmi
  • Ошибка нельзя установить свойство orientation класса pagesetup
  • Ошибка некорректный запрос к датасету
  • Ошибка нельзя преобразовать тип real к integer