Показать полную графическую версию : [решено] Excel макрос прячущий листы файла
Доброго времени суток.
Ситуация такая:
Допустим пользователь зашел в документ 10 мая 2012 года, как сделать чтобы он смог видеть только лист, который называется 10.05.2012, а все остальные листы были скрыты.
Сделал вот так
Т.е. логически должно быть так
макрос срабатывает при запуске документа (название Auto_open)
today() - стандартная функция, опрпделяющая сегодняшнюю дату
Макрос должен скрывать все листы, в которых название не соответствует сегодняшней дате
Sub Auto_open()
Dim wsSh As Object
For Each wsSh In ActiveWorkbook.Sheets
If wsSh.Name <> "today()" Then wsSh.Visible = xlSheetVeryHidden
Next wsSh
End Sub
McLotos, так у вас в этой части кода
wsSh.Name <> "today()" »
сравнивается напрямую с today().
В кавычках же указывается строковый тип. Функция today() соответсвенно не выполняется.
Попробуйте тут так:
CStr(Today())
sub or function not defined
sub or function not defined »
Потому что функции today() в VBA не существует. Есть функция «Now()», и функция «Format()», позволяющая получить заданный вид даты. Например:
Debug.Print Format(Now(), "YYYY.MM.DD")
И, кстати: не забудьте предусмотреть случай, когда название ни одного листа не совпадёт с текущей датой.
Sub Auto_open()
Dim wsSh As Object
For Each wsSh In ActiveWorkbook.Sheets
If wsSh.Name <> Now() Then wsSh.Visible = xlSheetVeryHidden
Next wsSh
End Sub
Срабатывает, хотя странно, я как раз с такого варианта и начал, это позже уже наткнулся на today().
Вроде как срабатывает, но как-то странно. Unable to set the Visible property of the Worksheet class
позже уже наткнулся на today(). »
Где наткнулись?
McLotos, временно вставьте следующий код:
Sub SomeSub()
Dim objSheet As Object
Debug.Print "Формат даты по умолчанию:", Now()
Debug.Print
For Each objSheet In ThisWorkbook.Sheets
Debug.Print TypeName(objSheet), vbTab, objSheet.Name
Next objSheet
End Sub
в искомую рабочую книгу, исполните его и выложите полученный результат из окна «Immediate» («Ctrl-G») сюда, обрамив его тэгом «code».
Worksheet Формат даты по умолчанию: 05.03.2012 9:48:48
Worksheet 01.01.2012
Worksheet 02.01.2012
Worksheet 03.01.2012
и так далее до 31.12.2012
McLotos, спасибо, ясно.
Вроде как срабатывает, но как-то странно. Unable to set the Visible property of the Worksheet class »
В рабочей книге должен оставаться видимым хотя бы один рабочий лист или диаграмма. Это тот самый случай, про который я писал выше:
И, кстати: не забудьте предусмотреть случай, когда название ни одного листа не совпадёт с текущей датой. »
В данном случае просто ошибка несовпадения, но результат — всё равно налицо.
Добавьте следующий код в рабочую книгу:
Sub ShowSheetsByCurrentDateOnly()
Dim objSheet As Object
Dim strCurrentDate As String
strCurrentDate = CStr(Date)
If SheetExists(ThisWorkbook, strCurrentDate) Then
ThisWorkbook.Sheets.Item(strCurrentDate).Visible = xlSheetVisible
For Each objSheet In ThisWorkbook.Sheets
If objSheet.Name <> strCurrentDate Then
objSheet.Visible = xlSheetVeryHidden
End If
Next objSheet
End If
End Sub
Function SheetExists(objWorkbook As Workbook, strSheetName As String) As Boolean
On Error Resume Next
SheetExists = Len(objWorkbook.Sheets.Item(strSheetName).Name) <> 0
End Function
и вставьте вызов процедуры «ShowSheetsByCurrentDateOnly()» в функцию «Auto_open()».
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.