Страницы: 1
RSS
Удаление скрытого листа в MS Excel при открытии файла
 
Добрый день! Есть задача сформировать отчет из программы в формате excel, а затем загрузить его в другую программу. Столкнулся со следующей проблемой: при формировании файла Excel, формируется скрытый лист, другая программа не видит этот файл из-за наличия скрытого листа. Есть ли возможность с помощью макроса делать скрытый лист видимым и сразу его удалять при открытии сформированного файла? Заранее спасибо!
Изменено: Владимир Чернавин - 19.01.2022 10:49:21
 
Код
Sub ShowAllSheetsAndDeleteHiddenInActiveWorkbook()
    ShowAllSheetsAndDeleteHiddenInWb ActiveWorkbook
End Sub

Sub ShowAllSheetsAndDeleteHiddenInWb(wb As Workbook)
    Dim sh As Worksheet
    For Each sh In wb.Worksheets
        If sh.Visible <> xlSheetVisible Then
            sh.Visible = xlSheetVisible
            Application.DisplayAlerts = False
            sh.Delete
            Application.DisplayAlerts = True
        End If
    Next
End Sub
 
Я правильно понимаю, что для того чтобы это сработало, нужно этот код скопировать в "Эта книга" и при открытии файла, через "Разработчик" - "макросы"- нужно нажать"Выполнить" ? при первом открытии файла не делает видимым и не удаляет?

Для примера прикладываю редактируемый файл.
 
Цитата
Владимир Чернавин: этот код скопировать в "Эта книга"
Workbook_Open (Открытие книги)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
В окне "ЭтаКнига", Выбрал Workbook, далее выбрал событие Open, но при открытии книги выдает ошибку, для примера приложил файл. Подскажите, может код не туда вставил, или не полностью условия прописаны в коде? (судя по ошибке, что-то с синтаксисом). Пробовал исправить, но все равно одна и та же ошибка. Если вручную запускать макрос после открытия книги, то работает корректно.  
 
Цитата
Владимир Чернавин написал:
может код не туда вставил
туда, но не так.
Вам ошибка как бы намекает - много лишних Sub. У Вас в модуле должно быть только это:
Код
Private Sub Workbook_Open()
    Dim sh As Worksheet
    For Each sh In ThisWorkbookWorkbook.Worksheets
        If sh.Visible <> xlSheetVisible Then
            sh.Visible = xlSheetVisible
            Application.DisplayAlerts = False
            sh.Delete
            Application.DisplayAlerts = True
        End If
    Next
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Спасибо! Все заработало! В строчке где производится перебор листов должно быть "For Each sh In ThisWorkbook.Worksheets" вместо " For Each sh In ThisWorkbookWorkbook.Worksheets".
Данные строчки нигде не фигурируют? (нужный функционал без них достигнут), в описании методов не нашел их свойства:
Код
Sub ShowAllSheetsAndDeleteHiddenInActiveWorkbook()
ShowAllSheetsAndDeleteHiddenInWb ActiveWorkbook
End Sub.
 
Цитата
ThisWorkbookWorkbook.Worksheets
Описка )

Показывать лист не обязательно. Лишняя строка
Код
sh.Visible = xlSheetVisible
Страницы: 1
Наверх