Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2010, 21:54   #1
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию Скрыть Листы по условию

Как скрыть листы по условию, если месяц начался, то предыдущий месяц-Лист, скрыть, вот код:
Код:
Function MonthRus(m) As String
  Select Case m
    Case 1:  MonthRus = "ЯНВАРЬ"    'Имена Листов
    Case 2:  MonthRus = "ФЕВРАЛЬ"   'Имена Листов
    Case 3:  MonthRus = "МАРТ"      'Имена Листов
    Case 4:  MonthRus = "АПРЕЛЬ"    'Имена Листов
    Case 5:  MonthRus = "МАЙ"       'Имена Листов
    Case 6:  MonthRus = "ИЮНЬ"      'Имена Листов
    Case 7:  MonthRus = "ИЮЛЬ"      'Имена Листов
    Case 8:  MonthRus = "АВГУСТ"    'Имена Листов
    Case 9:  MonthRus = "СЕНТЯБРЬ"  'Имена Листов
    Case 10: MonthRus = "ОКТЯБРЬ"   'Имена Листов
    Case 11: MonthRus = "НОЯБРЬ"    'Имена Листов
    Case 12: MonthRus = "ДЕКАБРЬ"   'Имена Листов
End Select
End Function
Т. е. нужно, что бы скрылись все листы, кроме "АПРЕЛЬ" и т. д.

Последний раз редактировалось valerij; 07.04.2010 в 22:51.
valerij вне форума Ответить с цитированием
Старый 07.04.2010, 22:51   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

мощь кода валит с ног...
1) какое отношение имеет фуккция, которая возвращает русское название мясяца по его номеру к процедуре скрыть/показать лист?

2) зачем там вот этот глубокомысленный фрагмент кода?
Код:
    With Application
        .EnableEvents = False
        .EnableEvents = True
    End With
3) можно, конечно выкинуть код обозначенный в п.2., но лучше заменить всю функцию на:
Код:
Function MonthRus(m) As String
  MonthRus = UCase(Format(DateSerial(2000, m, 1), "MMMM"))
End Function
будет делать, то же что и прежнея, одной короткой строкой, а не 18-ю.

4) и наконец, по существу
Код:
Sub ShowCurrentMonth()
  For Each sh In Sheets
    If sh.Name = UCase(Format(Now, "MMMM")) Then sh.Visible = True Else sh.Visible = False
  Next
End Sub
Это скроет все листы кроме листа, которые называется как текущий месяц. Запускать процедуру надо при каждом открытии файла.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 07.04.2010, 22:52   #3
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Получилось, вот так, но почему без GoTo не работает??
Код:
Function MonthRus(m) As String
  Select Case m
    Case 1:  MonthRus = "ЯНВАРЬ": GoTo A
    Case 2:  MonthRus = "ФЕВРАЛЬ": GoTo A
    Case 3:  MonthRus = "МАРТ": GoTo A
    Case 4:  MonthRus = "АПРЕЛЬ": GoTo A
    Case 5:  MonthRus = "МАЙ": GoTo A
    Case 6:  MonthRus = "ИЮНЬ": GoTo A
    Case 7:  MonthRus = "ИЮЛЬ": GoTo A
    Case 8:  MonthRus = "АВГУСТ": GoTo A
    Case 9:  MonthRus = "СЕНТЯБРЬ": GoTo A
    Case 10: MonthRus = "ОКТЯБРЬ": GoTo A
    Case 11: MonthRus = "НОЯБРЬ": GoTo A
    Case 12: MonthRus = "ДЕКАБРЬ": GoTo A
A:    For листы = 1 To 12
        Sheets(листы).Visible = False
    Next
    Sheets(m).Visible = True
  End Select
End Function
Игорь это же твой код, подредактировал, убрал ошибки #1

Последний раз редактировалось valerij; 07.04.2010 в 22:55.
valerij вне форума Ответить с цитированием
Старый 07.04.2010, 23:13   #4
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
4) и наконец, по существу
Код:
Sub ShowCurrentMonth()
  For Each sh In Sheets
    If sh.Name = UCase(Format(Now, "MMMM")) Then sh.Visible = True Else sh.Visible = False
  Next
End Sub
Это скроет все листы кроме листа, которые называется как текущий месяц. Запускать процедуру надо при каждом открытии файла.
Да, скрыло ВСЕ и текущий и выдало
Run-time error '1004':
Нельзя установить свойство Visible класса Worksheet

Последний раз редактировалось valerij; 07.04.2010 в 23:17.
valerij вне форума Ответить с цитированием
Старый 07.04.2010, 23:24   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

куда мы катимся. Валера - это мрак.
1) еще раз вопрос заченм это совать в функцию, которая нужна чтобы вернуть название месяца по его номеру?????

2) зачем вот это
Код:
    For листы = 1 To 12
        Sheets(листы).Visible = False
    Next
    Sheets(m).Visible = True
совать между Select Case m и End Select Прочитай синтаксис Select Case.

3) конечно можно все сунуть в эту функцию (если я не понимаю зачем - это еще не значит что нельзя, хотя логика отсутствует в такой записи полностью). Пиши так:
Код:
Function MonthRus(m) As String
  Select Case m
    Case 1:  MonthRus = "ЯНВАРЬ": GoTo A
    Case 2:  MonthRus = "ФЕВРАЛЬ": GoTo A
    Case 3:  MonthRus = "МАРТ": GoTo A
    Case 4:  MonthRus = "АПРЕЛЬ": GoTo A
    Case 5:  MonthRus = "МАЙ": GoTo A
    Case 6:  MonthRus = "ИЮНЬ": GoTo A
    Case 7:  MonthRus = "ИЮЛЬ": GoTo A
    Case 8:  MonthRus = "АВГУСТ": GoTo A
    Case 9:  MonthRus = "СЕНТЯБРЬ": GoTo A
    Case 10: MonthRus = "ОКТЯБРЬ": GoTo A
    Case 11: MonthRus = "НОЯБРЬ": GoTo A
    Case 12: MonthRus = "ДЕКАБРЬ": GoTo A
  End Select
    For листы = 1 To 12
        Sheets(листы).Visible = False
    Next
    Sheets(m).Visible = True
End Function
только поубирай все ": GoTo A" из каждого Case, а то на это больно смотреть.

4) спасибо, что убрал ошибки из моего кода, жаль что я их не увидел...
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 07.04.2010, 23:31   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
Sub ShowCurrentMonth()
  For Each sh In Sheets
    If sh.Name = UCase(Format(Now, "MMMM")) Then sh.Visible = True Else sh.Visible = False
  Next
End Sub
Цитата:
Да, скрыло ВСЕ и текущий и выдало
А откуда мне знать что у тебя нет листа с именем АПРЕЛЬ. Если он назван апрель, Апрель, апр., 04-апр. или еще как-то, то ты это знаешь, а я нет. А исправить - как два байта отослать...

Успехов!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 08.04.2010, 00:01   #7
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
листа с именем Апрель
Игорь, вот такой формат у всех Листов, красным, а что такое "MMMM" ??
Объясняй уж до конца, я менял на "Mmmm", та же ошибка.
valerij вне форума Ответить с цитированием
Старый 08.04.2010, 01:16   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

должно работать так и так:
Код:
If UCase(sh.Name) = UCase(Format(Now, "MMMM")) Then sh.Visible = True Else sh.Visible = False
If sh.Name = Format(Now, "MMMM") Then sh.Visible = True Else sh.Visible = False
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 08.04.2010, 01:49   #9
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

MMMM - это полное буквенное название месяца, MMM - сокращенное, а MM - цифрами.
motorway вне форума Ответить с цитированием
Старый 08.04.2010, 16:43   #10
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от motorway Посмотреть сообщение
MMMM - это полное буквенное название месяца, MMM - сокращенное, а MM - цифрами.
Понял, тока:
ММММ, можно так МАЙ или Май, или май, или нет разницы?
Спасибо.
Скока книг перечитал, нигде не встречал!!
valerij вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Листы ROBERT033 Microsoft Office Excel 10 04.02.2010 12:28
OpenGL и листы Пепел Феникса Gamedev - cоздание игр: Unity, OpenGL, DirectX 5 14.11.2009 12:21
Ссылки на листы Катик7 Microsoft Office Excel 4 11.06.2009 14:31
Скрыть листы по запросу RUBEY Microsoft Office Excel 23 16.01.2009 13:40
Переименовались Листы valerij Microsoft Office Excel 2 24.05.2008 21:35