Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBA - [решено] Excel макрос прячущий листы файла

Ответить
Настройки темы
VBA - [решено] Excel макрос прячущий листы файла

Аватара для McLotos

Старожил


Сообщения: 410
Благодарности: 21

Профиль | Отправить PM | Цитировать


Изменения
Автор: McLotos
Дата: 05-03-2012
Доброго времени суток.
Ситуация такая:
Допустим пользователь зашел в документ 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

-------
Старайтесь не решать свои проблемы по средствам личных сообщений, они могут быть решены очень не скоро.Не забывайте пользоваться поиском по форуму.Помните что уникальных проблем не бывает.Если всё-таки ответа не нашли, создайте тему, с подробным описанием проблемы.Спасибо за понимание.


Отправлено: 15:46, 05-03-2012

 

В Поисках Истины


Сообщения: 802
Благодарности: 135

Профиль | Отправить PM | Цитировать


McLotos, так у вас в этой части кода
Цитата McLotos:
wsSh.Name <> "today()" »
сравнивается напрямую с today().
В кавычках же указывается строковый тип. Функция today() соответсвенно не выполняется.
Попробуйте тут так:
Код: Выделить весь код
CStr(Today())

-------
foreach(short w in new short[] {73,3,79,83,90,79,78,69}){
Console.Write((char)w);
}


Отправлено: 16:15, 05-03-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для McLotos

Старожил


Сообщения: 410
Благодарности: 21

Профиль | Отправить PM | Цитировать


sub or function not defined

-------
Старайтесь не решать свои проблемы по средствам личных сообщений, они могут быть решены очень не скоро.Не забывайте пользоваться поиском по форуму.Помните что уникальных проблем не бывает.Если всё-таки ответа не нашли, создайте тему, с подробным описанием проблемы.Спасибо за понимание.


Отправлено: 16:19, 05-03-2012 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата McLotos:
sub or function not defined »
Потому что функции today() в VBA не существует. Есть функция «Now()», и функция «Format()», позволяющая получить заданный вид даты. Например:
Код: Выделить весь код
Debug.Print Format(Now(), "YYYY.MM.DD")
И, кстати: не забудьте предусмотреть случай, когда название ни одного листа не совпадёт с текущей датой.
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:38, 05-03-2012 | #4


Аватара для McLotos

Старожил


Сообщения: 410
Благодарности: 21

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
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

-------
Старайтесь не решать свои проблемы по средствам личных сообщений, они могут быть решены очень не скоро.Не забывайте пользоваться поиском по форуму.Помните что уникальных проблем не бывает.Если всё-таки ответа не нашли, создайте тему, с подробным описанием проблемы.Спасибо за понимание.


Последний раз редактировалось Drongo, 05-03-2012 в 17:39. Причина: тег код - [code]


Отправлено: 16:48, 05-03-2012 | #5


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата 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».

Последний раз редактировалось Iska, 05-03-2012 в 19:18. Причина: ActiveWorkbook→ThisWorkbook

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:56, 05-03-2012 | #6


Аватара для McLotos

Старожил


Сообщения: 410
Благодарности: 21

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
Worksheet                  Формат даты по умолчанию:    05.03.2012 9:48:48 

Worksheet                   01.01.2012
Worksheet                   02.01.2012
Worksheet                   03.01.2012
и так далее до 31.12.2012

-------
Старайтесь не решать свои проблемы по средствам личных сообщений, они могут быть решены очень не скоро.Не забывайте пользоваться поиском по форуму.Помните что уникальных проблем не бывает.Если всё-таки ответа не нашли, создайте тему, с подробным описанием проблемы.Спасибо за понимание.


Отправлено: 07:50, 06-03-2012 | #7


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


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()».
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:26, 06-03-2012 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBA - [решено] Excel макрос прячущий листы файла

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBA - Помогите написать макрос в Excel, экспорт данных из Excel в Word. E.v.g Программирование и базы данных 7 03-05-2018 22:18
VBA - [решено] Макрос excel neo21 Программирование и базы данных 4 06-03-2012 22:04
Разное - Макрос Excel. KiriJolit Microsoft Office (Word, Excel, Outlook и т.д.) 0 02-12-2010 23:19
[решено] Excel | Как сделать листы книги не изменяемыми (read-only) flow2000 Хочу все знать 3 31-01-2006 13:04
Внесение изменений во все листы книги Excel при помощи VB макросов Vadikan Программирование и базы данных 4 29-12-2005 02:10




 
Переход