Добрый день! Есть задача сформировать отчет из программы в формате excel, а затем загрузить его в другую программу. Столкнулся со следующей проблемой: при формировании файла Excel, формируется скрытый лист, другая программа не видит этот файл из-за наличия скрытого листа. Есть ли возможность с помощью макроса делать скрытый лист видимым и сразу его удалять при открытии сформированного файла? Заранее спасибо!
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, но при открытии книги выдает ошибку, для примера приложил файл. Подскажите, может код не туда вставил, или не полностью условия прописаны в коде? (судя по ошибке, что-то с синтаксисом). Пробовал исправить, но все равно одна и та же ошибка. Если вручную запускать макрос после открытия книги, то работает корректно.
туда, но не так. Вам ошибка как бы намекает - много лишних 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.