Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Запрет выполнения действий в определенный промежуток времени - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Запрет выполнения действий в определенный промежуток времени (Макросы Sub)
Запрет выполнения действий в определенный промежуток времени
light26 Дата: Воскресенье, 11.08.2013, 10:00 | Сообщение № 1
Группа: Друзья
Ранг: Старожил
Сообщений: 1347
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
Всем привет.
Хочу от макроса добиться, чтобы он не позволил пользователю внести изменения, если текущая дата не равна 5 - 7 числу любого месяца любого года.
В инете ничего похожего не нарыл. Подскажите, пожалуйста.
Вот код:
[vba]
Код
Sub Месяц()
       ActiveSheet.Unprotect
` Тут должно быть что-то вроде ЕСЛИ(ДЕНЬ(СЕГОДНЯ())<>5(или 6, или 7);"Вы не можете указать плановые задания на месяц, т.к. отчетный период еще не кончился";выполнить код ниже.
      Dim reply As Integer
      reply = MsgBox("Вы уверены, что хотите продолжить?" & Chr(10) & "Данные в ячейках будут очищены и отменить операцию будет невозможно", vbYesNo, "Запрос на продолжение")
          If reply = vbYes Then
              Range("G9:G160,I9:I160").ClearContents
               ActiveSheet.Unprotect
      Range("K9:K160").Copy
       ActiveSheet.Unprotect
      Range("I9").Select
       ActiveSheet.Unprotect
      Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
          :=False, Transpose:=False
          ActiveSheet.Unprotect
    Range("K9:K160").ClearContents
     Range("E67") = "=E69+E73"
          Range("E68") = "=E70+E74"
              Range("G67") = "=G69+G73"
          Range("G68") = "=G70+G74"
              Range("I67") = "=I69+I73"
          Range("I68") = "=I70+I74"
              Range("K67") = "=K69+K73"
      Range("G9,G11,G13,G15,G17,G19,G21,G23,G27,G31,G33,G35,G37,G39,G41,G43,G45,G47,G49,G51").Locked = False
      Range("G53,G55,G57,G59,G61,G63,G65,G69,G71,G73,G75,G77,G79,G81,G83,G86,G88,G90,G92,G94,G96,G98,G100").Locked = False
      Range("G102,G104,G106,G108,G110,G112,G114,G116,G118,G120,G122,G124,G126,G128,G130,G132,G134,G136,G138,G140,G143").Locked = False
      Range("G145,G147,G149,G151,G153,G155,G157,G159,G161").Locked = False
     MsgBox "Укажите плановые задания на месяц"
      Range("G9").Select
    ActiveSheet.Protect
     ElseIf reply = vbNo Then Exit Sub
          End If
    End Sub
[/vba]
Не судите строго мою писанину. Я на большее не способен пока :)


Я не волшебник. Я только учусь

Сообщение отредактировал light26 - Воскресенье, 11.08.2013, 10:01
 
Ответить
СообщениеВсем привет.
Хочу от макроса добиться, чтобы он не позволил пользователю внести изменения, если текущая дата не равна 5 - 7 числу любого месяца любого года.
В инете ничего похожего не нарыл. Подскажите, пожалуйста.
Вот код:
[vba]
Код
Sub Месяц()
       ActiveSheet.Unprotect
` Тут должно быть что-то вроде ЕСЛИ(ДЕНЬ(СЕГОДНЯ())<>5(или 6, или 7);"Вы не можете указать плановые задания на месяц, т.к. отчетный период еще не кончился";выполнить код ниже.
      Dim reply As Integer
      reply = MsgBox("Вы уверены, что хотите продолжить?" & Chr(10) & "Данные в ячейках будут очищены и отменить операцию будет невозможно", vbYesNo, "Запрос на продолжение")
          If reply = vbYes Then
              Range("G9:G160,I9:I160").ClearContents
               ActiveSheet.Unprotect
      Range("K9:K160").Copy
       ActiveSheet.Unprotect
      Range("I9").Select
       ActiveSheet.Unprotect
      Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
          :=False, Transpose:=False
          ActiveSheet.Unprotect
    Range("K9:K160").ClearContents
     Range("E67") = "=E69+E73"
          Range("E68") = "=E70+E74"
              Range("G67") = "=G69+G73"
          Range("G68") = "=G70+G74"
              Range("I67") = "=I69+I73"
          Range("I68") = "=I70+I74"
              Range("K67") = "=K69+K73"
      Range("G9,G11,G13,G15,G17,G19,G21,G23,G27,G31,G33,G35,G37,G39,G41,G43,G45,G47,G49,G51").Locked = False
      Range("G53,G55,G57,G59,G61,G63,G65,G69,G71,G73,G75,G77,G79,G81,G83,G86,G88,G90,G92,G94,G96,G98,G100").Locked = False
      Range("G102,G104,G106,G108,G110,G112,G114,G116,G118,G120,G122,G124,G126,G128,G130,G132,G134,G136,G138,G140,G143").Locked = False
      Range("G145,G147,G149,G151,G153,G155,G157,G159,G161").Locked = False
     MsgBox "Укажите плановые задания на месяц"
      Range("G9").Select
    ActiveSheet.Protect
     ElseIf reply = vbNo Then Exit Sub
          End If
    End Sub
[/vba]
Не судите строго мою писанину. Я на большее не способен пока :)

Автор - light26
Дата добавления - 11.08.2013 в 10:00
KuklP Дата: Воскресенье, 11.08.2013, 10:04 | Сообщение № 2
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
[vba]
Код
if day(date) >5 and day(date)<7 then
...
[/vba]


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
Сообщение[vba]
Код
if day(date) >5 and day(date)<7 then
...
[/vba]

Автор - KuklP
Дата добавления - 11.08.2013 в 10:04
light26 Дата: Воскресенье, 11.08.2013, 10:05 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1347
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
KuklP,
Спасибо, сейчас попробую


Я не волшебник. Я только учусь
 
Ответить
СообщениеKuklP,
Спасибо, сейчас попробую

Автор - light26
Дата добавления - 11.08.2013 в 10:05
AndreTM Дата: Воскресенье, 11.08.2013, 10:07 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
[vba]
Код
If Day(Date()) < 5 Or Day(Date()) > 7 Then
     MsgBox "Вы не можете указать плановые задания на месяц, т.к. отчетный период еще не кончился"
     Exit Sub
End If
[/vba]
Только вот может возникнуть проблема - например, в январе 5-7 число - выходные, как быть с планом? :)


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
Сообщение[vba]
Код
If Day(Date()) < 5 Or Day(Date()) > 7 Then
     MsgBox "Вы не можете указать плановые задания на месяц, т.к. отчетный период еще не кончился"
     Exit Sub
End If
[/vba]
Только вот может возникнуть проблема - например, в январе 5-7 число - выходные, как быть с планом? :)

Автор - AndreTM
Дата добавления - 11.08.2013 в 10:07
light26 Дата: Воскресенье, 11.08.2013, 10:12 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1347
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
AndreTM, ах, да. забыл про exit sub :)
Теперь все работает, спасибо


Я не волшебник. Я только учусь
 
Ответить
СообщениеAndreTM, ах, да. забыл про exit sub :)
Теперь все работает, спасибо

Автор - light26
Дата добавления - 11.08.2013 в 10:12
light26 Дата: Воскресенье, 11.08.2013, 10:15 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 1347
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
Только вот может возникнуть проблема - например, в январе 5-7 число - выходные, как быть с планом?

Хм. Об этом я не подумал :)
А если добавить еще одно условие. Для января?
Не, не выход. В другие месяца эти дни тоже могут попасть на выходные :(
Буду подумать как выйти из положения


Я не волшебник. Я только учусь

Сообщение отредактировал light26 - Воскресенье, 11.08.2013, 10:17
 
Ответить
Сообщение
Только вот может возникнуть проблема - например, в январе 5-7 число - выходные, как быть с планом?

Хм. Об этом я не подумал :)
А если добавить еще одно условие. Для января?
Не, не выход. В другие месяца эти дни тоже могут попасть на выходные :(
Буду подумать как выйти из положения

Автор - light26
Дата добавления - 11.08.2013 в 10:15
AndreTM Дата: Воскресенье, 11.08.2013, 10:25 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
Ну, в другие месяцы, из этих трёх дней - хоть один рабочий будет (предельный вариант: 4 ноября - суббота).
С другой стороны, я бы рассчитывал не на конкретные числа, а на "первые три рабочих дня после 4 числа месяца". Но это требует, как минимум, функции/надстройки Календаря, с выходными, настраиваемыми переносами праздников и т.п. - в общем, с настройкой по собственному графику работы.


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеНу, в другие месяцы, из этих трёх дней - хоть один рабочий будет (предельный вариант: 4 ноября - суббота).
С другой стороны, я бы рассчитывал не на конкретные числа, а на "первые три рабочих дня после 4 числа месяца". Но это требует, как минимум, функции/надстройки Календаря, с выходными, настраиваемыми переносами праздников и т.п. - в общем, с настройкой по собственному графику работы.

Автор - AndreTM
Дата добавления - 11.08.2013 в 10:25
light26 Дата: Воскресенье, 11.08.2013, 10:31 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 1347
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
Ну, в другие месяцы, из этих трёх дней - хоть один рабочий будет

Ну, тут еще майские могут подгадить... Да и отчетный день - четверг. Короче, увеличу-ка я диапазон до 15 числа. Еще раз спасибо за помощь


Я не волшебник. Я только учусь

Сообщение отредактировал light26 - Воскресенье, 11.08.2013, 10:31
 
Ответить
Сообщение
Ну, в другие месяцы, из этих трёх дней - хоть один рабочий будет

Ну, тут еще майские могут подгадить... Да и отчетный день - четверг. Короче, увеличу-ка я диапазон до 15 числа. Еще раз спасибо за помощь

Автор - light26
Дата добавления - 11.08.2013 в 10:31
light26 Дата: Воскресенье, 11.08.2013, 10:40 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 1347
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
AndreTM, можно еще вопрос.
Если нужен такой же запрет на дни недели, то
[vba]
Код
If Day(WeekDay) <> 4 Then
      MsgBox ("Невозможнно выполнить" & Chr(10) & "Сегодня не отчетный день")
End Sub
         End If
[/vba]
Верно?


Я не волшебник. Я только учусь
 
Ответить
СообщениеAndreTM, можно еще вопрос.
Если нужен такой же запрет на дни недели, то
[vba]
Код
If Day(WeekDay) <> 4 Then
      MsgBox ("Невозможнно выполнить" & Chr(10) & "Сегодня не отчетный день")
End Sub
         End If
[/vba]
Верно?

Автор - light26
Дата добавления - 11.08.2013 в 10:40
AndreTM Дата: Воскресенье, 11.08.2013, 10:58 | Сообщение № 10
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
[vba]
Код
If Weekday(Date(), vbMonday) <> 4 Then
[/vba]


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
Сообщение[vba]
Код
If Weekday(Date(), vbMonday) <> 4 Then
[/vba]

Автор - AndreTM
Дата добавления - 11.08.2013 в 10:58
KuklP Дата: Воскресенье, 11.08.2013, 10:58 | Сообщение № 11
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Нет.
[vba]
Код
    If Weekday(Date, 2) <> 4 Then
         MsgBox ("Невозможнно выполнить" & Chr(10) & "Сегодня не отчетный день")
     End If
[/vba]


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеНет.
[vba]
Код
    If Weekday(Date, 2) <> 4 Then
         MsgBox ("Невозможнно выполнить" & Chr(10) & "Сегодня не отчетный день")
     End If
[/vba]

Автор - KuklP
Дата добавления - 11.08.2013 в 10:58
KuklP Дата: Воскресенье, 11.08.2013, 11:04 | Сообщение № 12
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Еще вот это лучше уточнять:
[vba]
Код
Range("E68") = "=E70+E74"
[/vba]
так:
[vba]
Код
Range("E68").formula = "=E70+E74"
[/vba]


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеЕще вот это лучше уточнять:
[vba]
Код
Range("E68") = "=E70+E74"
[/vba]
так:
[vba]
Код
Range("E68").formula = "=E70+E74"
[/vba]

Автор - KuklP
Дата добавления - 11.08.2013 в 11:04
light26 Дата: Воскресенье, 11.08.2013, 11:44 | Сообщение № 13
Группа: Друзья
Ранг: Старожил
Сообщений: 1347
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
KuklP, AndreTM, спасибо


Я не волшебник. Я только учусь

Сообщение отредактировал light26 - Воскресенье, 11.08.2013, 11:44
 
Ответить
СообщениеKuklP, AndreTM, спасибо

Автор - light26
Дата добавления - 11.08.2013 в 11:44
light26 Дата: Воскресенье, 11.08.2013, 11:46 | Сообщение № 14
Группа: Друзья
Ранг: Старожил
Сообщений: 1347
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
KuklP, можно уточнить почему запись формулы в ячейку должен быть в виде
[vba]
Код
Range("E68").formula = "=E70+E74"
[/vba]
, в чем принципиальная разница?


Я не волшебник. Я только учусь
 
Ответить
СообщениеKuklP, можно уточнить почему запись формулы в ячейку должен быть в виде
[vba]
Код
Range("E68").formula = "=E70+E74"
[/vba]
, в чем принципиальная разница?

Автор - light26
Дата добавления - 11.08.2013 в 11:46
KuklP Дата: Воскресенье, 11.08.2013, 12:07 | Сообщение № 15
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Вот это: "=E70+E74" - текстовая строка. Эксел не всегда понимает, что это формула и тогда выводит ее в ячейке как строку. А так: Range("E68").formula = ... мы явно указываем эксу, как ее необходимо воспринимать.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеВот это: "=E70+E74" - текстовая строка. Эксел не всегда понимает, что это формула и тогда выводит ее в ячейке как строку. А так: Range("E68").formula = ... мы явно указываем эксу, как ее необходимо воспринимать.

Автор - KuklP
Дата добавления - 11.08.2013 в 12:07
light26 Дата: Воскресенье, 11.08.2013, 12:46 | Сообщение № 16
Группа: Друзья
Ранг: Старожил
Сообщений: 1347
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
KuklP, понятно


Я не волшебник. Я только учусь
 
Ответить
СообщениеKuklP, понятно

Автор - light26
Дата добавления - 11.08.2013 в 12:46
SergeyKorotun Дата: Воскресенье, 11.08.2013, 22:56 | Сообщение № 17
Группа: Проверенные
Ранг: Обитатель
Сообщений: 301
Репутация: 15 ±
Замечаний: 0% ±

Excel 2007
Даже самый неопытный юзер легко обойдет эту защиту, изменив системную дату.
 
Ответить
СообщениеДаже самый неопытный юзер легко обойдет эту защиту, изменив системную дату.

Автор - SergeyKorotun
Дата добавления - 11.08.2013 в 22:56
light26 Дата: Вторник, 13.08.2013, 09:42 | Сообщение № 18
Группа: Друзья
Ранг: Старожил
Сообщений: 1347
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
SergeyKorotun, это не защита, а предостережение, чтобы человек не допустил случайную ошибку.


Я не волшебник. Я только учусь
 
Ответить
СообщениеSergeyKorotun, это не защита, а предостережение, чтобы человек не допустил случайную ошибку.

Автор - light26
Дата добавления - 13.08.2013 в 09:42
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Запрет выполнения действий в определенный промежуток времени (Макросы Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!