Всем привет. Хочу от макроса добиться, чтобы он не позволил пользователю внести изменения, если текущая дата не равна 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] Не судите строго мою писанину. Я на большее не способен пока
Всем привет. Хочу от макроса добиться, чтобы он не позволил пользователю внести изменения, если текущая дата не равна 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
Я не волшебник. Я только учусь
Сообщение отредактировал light26 - Воскресенье, 11.08.2013, 10:01
If Day(Date()) < 5 Or Day(Date()) > 7 Then MsgBox "Вы не можете указать плановые задания на месяц, т.к. отчетный период еще не кончился" Exit Sub End If
[/vba] Только вот может возникнуть проблема - например, в январе 5-7 число - выходные, как быть с планом?
[vba]
Код
If Day(Date()) < 5 Or Day(Date()) > 7 Then MsgBox "Вы не можете указать плановые задания на месяц, т.к. отчетный период еще не кончился" Exit Sub End If
[/vba] Только вот может возникнуть проблема - например, в январе 5-7 число - выходные, как быть с планом? AndreTM
Только вот может возникнуть проблема - например, в январе 5-7 число - выходные, как быть с планом?
Хм. Об этом я не подумал А если добавить еще одно условие. Для января? Не, не выход. В другие месяца эти дни тоже могут попасть на выходные Буду подумать как выйти из положения
Только вот может возникнуть проблема - например, в январе 5-7 число - выходные, как быть с планом?
Хм. Об этом я не подумал А если добавить еще одно условие. Для января? Не, не выход. В другие месяца эти дни тоже могут попасть на выходные Буду подумать как выйти из положенияlight26
Я не волшебник. Я только учусь
Сообщение отредактировал light26 - Воскресенье, 11.08.2013, 10:17
Ну, в другие месяцы, из этих трёх дней - хоть один рабочий будет (предельный вариант: 4 ноября - суббота). С другой стороны, я бы рассчитывал не на конкретные числа, а на "первые три рабочих дня после 4 числа месяца". Но это требует, как минимум, функции/надстройки Календаря, с выходными, настраиваемыми переносами праздников и т.п. - в общем, с настройкой по собственному графику работы.
Ну, в другие месяцы, из этих трёх дней - хоть один рабочий будет (предельный вариант: 4 ноября - суббота). С другой стороны, я бы рассчитывал не на конкретные числа, а на "первые три рабочих дня после 4 числа месяца". Но это требует, как минимум, функции/надстройки Календаря, с выходными, настраиваемыми переносами праздников и т.п. - в общем, с настройкой по собственному графику работы.AndreTM
Вот это: "=E70+E74" - текстовая строка. Эксел не всегда понимает, что это формула и тогда выводит ее в ячейке как строку. А так: Range("E68").formula = ... мы явно указываем эксу, как ее необходимо воспринимать.
Вот это: "=E70+E74" - текстовая строка. Эксел не всегда понимает, что это формула и тогда выводит ее в ячейке как строку. А так: Range("E68").formula = ... мы явно указываем эксу, как ее необходимо воспринимать.KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728