Страницы: 1
RSS
Скрытие и отоброжение листов макросом
 
Дорого дня форумчане и гуру екселя....

Есть макрос который прячет листы (номера которых находятся в ячейке)....Он работает на скрытие листов но не работает на отоброжение.....Где косяк?))
Код
Sub Спрятать() ' прячет листы перечисленные в ячейке
    
    s = Sheets("Лист1").Range("D1").Value ' номера листов беруться из ячейки
    a = Split(s, ",")
    For i = 0 To UBound(a): a(i) = Sheets(Val(a(i))).Name: Next
      'Sheets(a).Visible = xlSheetHidden  'работает на скрытие
      'Sheets(a).Visible = xlSheetVisible  'не работает !!!!
      On Error Resume Next
        'End If
End Sub
Выдает Ошибку-1004 в Excel VBA - невозможно установить свойство visible класса worksheet
 
Сделайте это не с массивом, а переберите в цикле.
 
... или переходите на Excel 2021 - там, вероятно, можно сразу открыть несколько листов.   :)  
Владимир
 
Спасибо за ответы но есть маленький нюанс.....Сам только постигаю этот мир и он не сдается без боя......Если можно то конкретные действия или ошибки в коде макроса указать (поправить).....

На новый эксель это конечно здорово..... Но мне бы до конца со старым разобраться))))
 
Цитата
написал:
конкретные действия или ошибки в коде макроса указать
так указали уже - надо прямо в цикле изменять видимость:
Код
For i = 0 To UBound(a): a(i) = Sheets(Val(a(i))).Visible = xlSheetVisible: Next
Вообще, для новичка в VBA запись через двоеточие не самая лучшая. Понятнее будет так:
Код
For i = 0 To UBound(a) 'начало цикла по массиву а с шагом по умолчанию 1
    a(i) = Sheets(Val(a(i))).Visible = xlSheetVisible 'действия для каждой итерации цикла
Next 'переход на следующую итерацию цикла
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Артур Завгородний,
Код
Sub Спрятать() ' прячет листы перечисленные в ячейке
    s = Sheets("Лист1").Range("D1").Value ' номера листов беруться из ячейки
    a = Split(s, ",")
    For i = 0 To UBound(a): X = Sheets(Val(a(i))).Name
    If Sheets(X).Visible = xlSheetHidden Then
      Sheets(X).Visible = xlSheetVisible
    Else
      Sheets(X).Visible = xlSheetHidden
    End If
    Next
End Sub
Изменено: Mershik - 30.11.2021 09:49:03
Не бойтесь совершенства. Вам его не достичь.
 
Спасибо огромное за оперативный ответ!!! Хорошего Вам дня.... Мало того что решили быстро так еще и сократили количество макросов в книге.....Обычно я писал отдельный макрос на скрытие и отдельный на отображение + 2 разные кнопки.....))))) А тут все в одном и кнопка одна !!!! Супер.
 
Кнопку вообще я бы убрал на ленту, на листе они как то не презентабельно смотрятся, если это не интерфейс из нескольких кнопок и полей для заполнения
"Все гениальное просто, а все простое гениально!!!"
 
Буду Вам примного благодарен если на моем маленьком примере подскажете как это делать......
 
Цитата
Артур Завгородний написал:
Буду Вам примного благодарен если на моем маленьком примере подскажете как это делать.....
Варианта 2 - 1) стандартными методами Excel, создав вкладку и вынеся на нее макрос  2) с помощью программы RibbonXML
Изменено: Nordheim - 01.12.2021 14:07:47
"Все гениальное просто, а все простое гениально!!!"
Страницы: 1
Наверх