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

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

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

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

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

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

Есть листы с названиями: "АПРЕЛЬ", "МАЙ", "ИЮНЬ" - это рабочие листы и еще есть с 10 доплнит. листов.
Пусть, ЕЩЕ сегодня, будет ИЮНь, я чета делал в Листе10 и закрываю книгу при открытии книги, книга откроется с Лист10, а мне надо лист ИЮНЬ.
Если в макросе я ставлю, что бы при открытии книги стал активный лист ИЮНЬ, то не корректно работает макрос.
Код:
Private Sub Workbook_Open()
                Sheets("ИЮНЬ").Select
End Sub
Мне приходится в ручную переходить в лист текущего месяца, закрывать книгу, тогда при открытии книги все работает.
Как при закрытии книги автоматом, переключиться в лист = текущему месяцу(ИЮНЬ)?
Код:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Sheets("ИЮНЬ").Select
End Sub

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

Цитата:
Private Sub Workbook_Open()
On Error Resume Next
Sheets(MonthRus(Month(Now))).Select
If Err.Number > 0 Then
If Month(Now) = 1 Then
Sheets.Add After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = MonthRus(Month(Now))
Else
Sheets.Add After:=Sheets(MonthRus(Month(Now) - 1))
Sheets(Sheets(MonthRus(Month(Now) - 1)).Index + 1).Name = MonthRus
End If
End If
End Sub


Function MonthRus(m) As String
Select Case m
Case 1
MonthRus = "ЯНВАРЬ"
Case 2
MonthRus = "ФЕВРАЛЬ"
Case Else
MonthRus = "%$#^$&^@"
End Select
End Function
MonthRus только дописать надо, чтобы все названия корректно возвращала. Успехов!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 02.07.2009, 12:38   #3
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
MonthRus только дописать надо, чтобы все названия корректно возвращала. Успехов!
Игорь, ошибку пишет и выделяет в строке(красным)
Sheets(Sheets(MonthRus(Month(Now) - 1)).Index + 1).Name = MonthRus
Compile error:
Argument not optional

Да, MonthRus = "%$#^$&^@", так надо?
valerij вне форума Ответить с цитированием
Старый 02.07.2009, 14:35   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

извини, так надо:
Sheets(Sheets(MonthRus(Month(Now) - 1)).Index + 1).Name = MonthRus(Month(Now))

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

Цитата:
Сообщение от IgorGO Посмотреть сообщение
там очевидно все
Игорь, но не мне!
Ошибки нет, но и возврата нет, сохраняю в сентябре, так же и открываю, взгляни.
Вложения
Тип файла: rar Кн1.rar (12.4 Кб, 12 просмотров)
valerij вне форума Ответить с цитированием
Старый 02.07.2009, 15:54   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

это как понимать? в Мариуполе 1-й месяц - это июль, а 2-й - август????
В Киеве сейчас месяц №7 это июль, або лыпень, якщо Вам так зручнише, а по Мариупольскому летоисчислению который?

Предполагалось функция MonthRus(м) получает номер месяца в качестве параметра, а возвращает его русское название БОЛЬШИМИ буквами. Соответсвенно 1-й - это январь, 2 - феврарь и т.д., еще 10 раз (сам допишешь или перечислить названия месяцев?). Все эта ерунда работает не с последним месяцем, который заполнен в файле, а с текущим. При каждом открытии книга активным становится лист, название которого соответствует текущему месяцу, если листа с таким именем нет - он добавляется в книгу. Еще предполагается, что в книге существует листы, соответствующие всем уже прошедшим в этом году месяцам.
В твоей книге, как минимум надо завести лист с именем ИЮНЬ. Когда в книге вообще еще нет листов с названиями месяцев, ЯНВАРЬ добавляется в самый конец списка листов.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 02.07.2009, 16:33   #7
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
это как понимать?.
Игорь, мой раб файл содержит только 3 месяца, КВАРТАЛ и если я вставлю все месяцы...12 шт + мои 13, 25 листов, не много???
Нельзя с системной даты, как то выдрать месяц и сравнивать....????
valerij вне форума Ответить с цитированием
Старый 02.07.2009, 18:24   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

ладно, я понял - обьяснять что должна сделать MonthRus дольше, чем написать ее самому.

вот вариант кода:
Код:
Private Sub Workbook_Open()
  On Error Resume Next
  Sheets(MonthRus(Month(Now))).Select
  If Err.Number > 0 Then
    Err.Clear
    Sheets(MonthRus(Month(Now) - 1)).Select
    If Err.Number > 0 Then ShN = Sheets.Count Else ShN = Sheets(MonthRus(Month(Now) - 1)).Index
    Sheets.Add After:=Sheets(ShN)
    Sheets(ShN + 1).Name = MonthRus(Month(Now))
  End If
End Sub


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
выполняет следующее:
1. при каждом открытии книги активным становится лист, название которого совпадает с названием текущего месяца, полученного от MonthRus.
2. если листа с таким именем нет - в книгу добавляется новый лист, который вставляется за предыдущим месяцем если он есть и в конец списка листов, если предыдущего месяца нет на листе.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 03.07.2009, 00:38   #9
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
1. при каждом открытии книги активным становится лист, название которого совпадает с названием текущего месяца, полученного от MonthRus.
Игорь, все работает, но есть одно, но!
Можно сделать, что бы не при открытии, а при закрытии, это связанно с макросом Vniz, Vverh.
Я не знаю, почему так происходит, но если так как у тебя, то скролл работает и что бы он не работал, мне в ручную надо щелкнуть PGDN-PGUP или перещелкнуть листы, я уже в каждый лист(ИЮЛЬ, АВГУСТ, СЕНТЯБРЬ) вставил:
Код:
Private Sub Worksheet_Activate()
    With Application
    .ScreenUpdating = False
        .EnableEvents = False
    .Run "Vniz"
    .Run "Vverh"
            .OnKey "{PGDN}", "Vniz"
            .OnKey "{PGUP}", "Vverh"
            .ScreenUpdating = True
    .EnableEvents = True
    End With
End Sub
Но это + твой марос, не помогло.
Почему то так заработало
Код:
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:
With Application
    .ScreenUpdating = False
        .EnableEvents = False
    .Run "Vniz"
    .Run "Vverh"
            .OnKey "{PGDN}", "Vniz"
            .OnKey "{PGUP}", "Vverh"
            .ScreenUpdating = True
    .EnableEvents = True
    End With
  End Select
End Function

Последний раз редактировалось valerij; 03.07.2009 в 00:47.
valerij вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение копии книги при ее закрытии. Busine2009 Microsoft Office Excel 17 17.06.2009 04:36
Автозапуск макроса при открытии и закрытии книги ruavia3 Microsoft Office Excel 8 06.04.2009 11:09
Как выполнить действие при закрытии Книги? valerij Microsoft Office Excel 9 12.03.2009 15:31
При закрытии книги, удаляются листы Romuald Microsoft Office Excel 3 20.01.2009 21:34
Как защитить рабочий лист от ввода с клавиатуры, но не от действий макроса ? valerij Microsoft Office Excel 7 28.05.2008 23:59