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, так у вас в этой части кода
сравнивается напрямую с today().
В кавычках же указывается строковый тип. Функция today() соответсвенно не выполняется.
Попробуйте тут так:
|
sub or function not defined
|
Цитата:
Цитата McLotos
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
|
Цитата:
Цитата McLotos
позже уже наткнулся на 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, спасибо, ясно.
Цитата:
Цитата McLotos
Вроде как срабатывает, но как-то странно. Unable to set the Visible property of the Worksheet class »
|
В рабочей книге должен оставаться видимым хотя бы один рабочий лист или диаграмма. Это тот самый случай, про который я писал выше:
Цитата:
Цитата Iska
И, кстати: не забудьте предусмотреть случай, когда название ни одного листа не совпадёт с текущей датой. »
|
В данном случае просто ошибка несовпадения, но результат — всё равно налицо.
Добавьте следующий код в рабочую книгу:
Код:
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()».
|
Время: 20:57.
© OSzone.net 2001-