Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Запись формул в столбец по нажатию кнопки., Нужна помощь в оптимизации кода макросов.
 
С блокировкой кнопок разобрался. Но количество кода всё равно большое и при изменении формул, нужно менять их в каждом макросе. Может кто-нибудь подскажет как уйти от такого количества кнопок и макросов?
Запись формул в столбец по нажатию кнопки., Нужна помощь в оптимизации кода макросов.
 
Доброго времени суток форумчане! Опыта написания макросов крайне мало, по этому прошу помощи у Вас.
Имею простую задачу по записи формул в столбец по нажатию кнопки и блокированию повторного нажатия данной кнопки. С записью формул справился при помощи быдлокода, а вот с блокированием повторного нажатия не смог, да и вносить отдельный макрос на каждую кнопку не очень правильно, всего создано 63.кнопки (по 2 на каждый день месяца и 1 на запись изначальных формул в конце месяца).
Код
Sub zam02() 'первая запись в столбец
Range("h6:h178").FormulaLocal = "=СУММЕСЛИ('Остатки цеха ЗАМ'!E:E;B:B;'Остатки цеха ЗАМ'!F:F)++СУММЕСЛИ('Задание для обвалки'!A:A;B:B;'Задание для обвалки'!D:D)"
End Sub

Sub sgp02() 'вторая запись в столбец
Range("h6:h178").FormulaLocal = "=СУММЕСЛИ('Приходы на СГП'!E:E;B:B;'Приходы на СГП'!F:F)"
End Sub

Sub otchistka() ' сброс всех формул в конце месяца
' объявляем переменные
    Dim UserEntry As Variant
    Dim Msg As String
    Dim NextRow As Long
    Const Pass1 As Integer = 2563
    ' запрашиваем пароль
    Msg = "Введите пароль."
    Do  ' сверяем пароль
        UserEntry = InputBox(Msg)
        If UserEntry = "" Then Exit Sub
        If IsNumeric(UserEntry) Then
            If UserEntry = Pass1 Then Exit Do
        End If
        Msg = "НЕ ВЕРНЫЙ ПАРОЛЬ."
        Msg = Msg & vbNewLine
        Msg = Msg & "Введите пароль."
    Loop
Range("e6:e178").FormulaLocal = "=СУММЕСЛИ('план по убою'!A:A;B:B;'план по убою'!c:c)+СУММЕСЛИ('план на обвалку'!A:A;B:B;'план на обвалку'!d:d)"
Range("h6:h178").FormulaLocal = "=ЕСЛИ(ЕПУСТО(F4);СУММЕСЛИ('план по убою'!A:A;B:B;'план по убою'!E:E)+СУММЕСЛИ('план на обвалку'!A:A;B:B;'план на обвалку'!F:F)+СУММЕСЛИ('Задание для обвалки'!A:A;B:B;'Задание для обвалки'!E:E);F4)"
Range("k6:k178").FormulaLocal = "=СУММЕСЛИ('план по убою'!A:A;B:B;'план по убою'!e:e)+СУММЕСЛИ('план на обвалку'!A:A;B:B;'план на обвалку'!f:f)"
Range("n6:n178").FormulaLocal = "=СУММЕСЛИ('план по убою'!A:A;B:B;'план по убою'!f:f)+СУММЕСЛИ('план на обвалку'!A:A;B:B;'план на обвалку'!g:g)"
Range("q6:q178").FormulaLocal = "=СУММЕСЛИ('план по убою'!A:A;B:B;'план по убою'!g:g)+СУММЕСЛИ('план на обвалку'!A:A;B:B;'план на обвалку'!h:h)"
Range("t6:t178").FormulaLocal = "=СУММЕСЛИ('план по убою'!A:A;B:B;'план по убою'!h:h)+СУММЕСЛИ('план на обвалку'!A:A;B:B;'план на обвалку'!i:i)"
Range("w6:w178").FormulaLocal = "=СУММЕСЛИ('план по убою'!A:A;B:B;'план по убою'!i:i)+СУММЕСЛИ('план на обвалку'!A:A;B:B;'план на обвалку'!j:j)"
Range("z6:z178").FormulaLocal = "=СУММЕСЛИ('план по убою'!A:A;B:B;'план по убою'!j:j)+СУММЕСЛИ('план на обвалку'!A:A;B:B;'план на обвалку'!k:k)"
Range("ac6:ac178").FormulaLocal = "=СУММЕСЛИ('план по убою'!A:A;B:B;'план по убою'!k:k)+СУММЕСЛИ('план на обвалку'!A:A;B:B;'план на обвалку'!l:l)"
Range("af6:af178").FormulaLocal = "=СУММЕСЛИ('план по убою'!A:A;B:B;'план по убою'!l:l)+СУММЕСЛИ('план на обвалку'!A:A;B:B;'план на обвалку'!m:m)"
Range("ai6:ai178").FormulaLocal = "=СУММЕСЛИ('план по убою'!A:A;B:B;'план по убою'!m:m)+СУММЕСЛИ('план на обвалку'!A:A;B:B;'план на обвалку'!n:n)"
Range("al6:al178").FormulaLocal = "=СУММЕСЛИ('план по убою'!A:A;B:B;'план по убою'!n:n)+СУММЕСЛИ('план на обвалку'!A:A;B:B;'план на обвалку'!o:o)"
Range("ao6:ao178").FormulaLocal = "=СУММЕСЛИ('план по убою'!A:A;B:B;'план по убою'!o:o)+СУММЕСЛИ('план на обвалку'!A:A;B:B;'план на обвалку'!p:p)"
Range("ar6:ar178").FormulaLocal = "=СУММЕСЛИ('план по убою'!A:A;B:B;'план по убою'!p:p)+СУММЕСЛИ('план на обвалку'!A:A;B:B;'план на обвалку'!q:q)"
Range("au6:au178").FormulaLocal = "=СУММЕСЛИ('план по убою'!A:A;B:B;'план по убою'!q:q)+СУММЕСЛИ('план на обвалку'!A:A;B:B;'план на обвалку'!r:r)"
Range("ax6:ax178").FormulaLocal = "=СУММЕСЛИ('план по убою'!A:A;B:B;'план по убою'!r:r)+СУММЕСЛИ('план на обвалку'!A:A;B:B;'план на обвалку'!s:s)"
Range("ba6:ba178").FormulaLocal = "=СУММЕСЛИ('план по убою'!A:A;B:B;'план по убою'!s:s)+СУММЕСЛИ('план на обвалку'!A:A;B:B;'план на обвалку'!t:t)"
Range("bd6:bd178").FormulaLocal = "=СУММЕСЛИ('план по убою'!A:A;B:B;'план по убою'!t:t)+СУММЕСЛИ('план на обвалку'!A:A;B:B;'план на обвалку'!u:u)"
Range("bg6:bg178").FormulaLocal = "=СУММЕСЛИ('план по убою'!A:A;B:B;'план по убою'!u:u)+СУММЕСЛИ('план на обвалку'!A:A;B:B;'план на обвалку'!v:v)"
Range("bj6:bj178").FormulaLocal = "=СУММЕСЛИ('план по убою'!A:A;B:B;'план по убою'!v:v)+СУММЕСЛИ('план на обвалку'!A:A;B:B;'план на обвалку'!w:w)"
Range("bm6:bm178").FormulaLocal = "=СУММЕСЛИ('план по убою'!A:A;B:B;'план по убою'!w:w)+СУММЕСЛИ('план на обвалку'!A:A;B:B;'план на обвалку'!x:x)"
Range("bp6:bp178").FormulaLocal = "=СУММЕСЛИ('план по убою'!A:A;B:B;'план по убою'!x:x)+СУММЕСЛИ('план на обвалку'!A:A;B:B;'план на обвалку'!y:y)"
Range("bs6:bs178").FormulaLocal = "=СУММЕСЛИ('план по убою'!A:A;B:B;'план по убою'!y:y)+СУММЕСЛИ('план на обвалку'!A:A;B:B;'план на обвалку'!z:z)"
Range("bv6:bv178").FormulaLocal = "=СУММЕСЛИ('план по убою'!A:A;B:B;'план по убою'!z:z)+СУММЕСЛИ('план на обвалку'!A:A;B:B;'план на обвалку'!Aa:Aa)"
Range("by6:by178").FormulaLocal = "=СУММЕСЛИ('план по убою'!A:A;B:B;'план по убою'!AA:AA)+СУММЕСЛИ('план на обвалку'!A:A;B:B;'план на обвалку'!Ab:Ab)"
Range("cb6:cb178").FormulaLocal = "=СУММЕСЛИ('план по убою'!A:A;B:B;'план по убою'!AB:AB)+СУММЕСЛИ('план на обвалку'!A:A;B:B;'план на обвалку'!Ac:Ac)"
Range("ce6:ce178").FormulaLocal = "=СУММЕСЛИ('план по убою'!A:A;B:B;'план по убою'!AC:AC)+СУММЕСЛИ('план на обвалку'!A:A;B:B;'план на обвалку'!AD:AD)"
Range("ch6:ch178").FormulaLocal = "=СУММЕСЛИ('план по убою'!A:A;B:B;'план по убою'!AD:AD)+СУММЕСЛИ('план на обвалку'!A:A;B:B;'план на обвалку'!AE:AE)"
Range("ck6:ck178").FormulaLocal = "=СУММЕСЛИ('план по убою'!A:A;B:B;'план по убою'!AE:AE)+СУММЕСЛИ('план на обвалку'!A:A;B:B;'план на обвалку'!AF:AF)"
Range("cn6:cn178").FormulaLocal = "=СУММЕСЛИ('план по убою'!A:A;B:B;'план по убою'!AF:AF)+СУММЕСЛИ('план на обвалку'!A:A;B:B;'план на обвалку'!AG:AG)"
Range("cq6:cq178").FormulaLocal = "=СУММЕСЛИ('план по убою'!A:A;B:B;'план по убою'!AG:AG)+СУММЕСЛИ('план на обвалку'!A:A;B:B;'план на обвалку'!AH:AH)"
End Sub

Может есть решение по созданию одного макроса с последовательной записью в обозначенные столбцы?
Файл сильно урезан - по объёму не проходил.
Изменено: alone_mech - 06.08.2018 10:06:42
Не выводится необходимое сообщение при выполнении функции IF в макросе.
 
V,Огромное спасибо помогло!
Не выводится необходимое сообщение при выполнении функции IF в макросе.
 
Equio, Если у Вас есть предложения по оптимизации кода, я с радостью приму их к сведению. В учебниках далеко не всё описано, а опыта позволяющего отойти от них, у меня ещё нет.  
Не выводится необходимое сообщение при выполнении функции IF в макросе.
 
Пароль на лист 0000
Проблема с модулем 4
Hugo, Пробовал как Вы сказали и попробовал сделать отдельную переменную для этого цикла. Не помогло.
К сожалению я только начинаю изучать VBA и могу делать смешные ошибки :(
Не выводится необходимое сообщение при выполнении функции IF в макросе.
 
Hugo, попробовал, но не помогло. :(
Не выводится необходимое сообщение при выполнении функции IF в макросе.
 
Доброго времени суток!
Столкнулся с проблемой. При выполнении макрос отрабатывает на ура, кроме ситуации, когда в ячейке есть данные. Вместо сообщения "ЭТА ЗАЯВКА ЗАПОЛНЕНА!!!" "Выберите другую заявку", выводится сообщение "Номер заявки". Подскажите, где я ошибся?
Код
Sub GetData2()
    'объявляем переменные
    Dim UserEntry As Variant
    Dim Msg As String
    Dim Entry1 As String, Entry2 As String, Entry3 As String, Entry4 As String
    Dim NextRow As Long
    Const Pass1 As Integer = 1125
    Const Pass2 As Integer = 1247
    'запрашиваем пароль
    Msg = "Введите пароль."
    Do  'сверяем пароль
        UserEntry = InputBox(Msg)
        If UserEntry = "" Then Exit Sub
        If IsNumeric(UserEntry) Then
            If UserEntry = Pass1 Or UserEntry = Pass2 Then Exit Do
        End If
        Msg = "Не верный пароль."
        Msg = Msg & vbNewLine
        Msg = Msg & "Введите пароль."
    Loop
       
  Do
    'запрос данных
    Entry1 = InputBox("Номер заявки")
    If Entry1 = "" Then Exit Sub
    NextRow = Entry1 + 2
    ' проверяем, пуста ли ячейка
    If IsEmpty(Cells(NextRow, 5)) = True Then Exit Do
    If Not IsEmpty(Cells(NextRow, 5)) Then
        Msg = "ЭТА ЗАЯВКА ЗАПОЛНЕНА!!!"
        Msg = Msg & vbNewLine
        Msg = Msg & "Выберите другую заявку."
        End If
    Loop
         
   Do
    Entry2 = InputBox("Опишите выполненные работы")
    If Entry2 = "" Then Exit Sub
    Entry3 = InputBox("Укажите исполнителя")
    If Entry3 = "" Then Exit Sub
    Entry4 = InputBox("Есть замечания?")
    If Entry4 = "" Then Exit Sub
'   запись данных
    
    Cells(NextRow, 5) = Entry2
    Cells(NextRow, 6) = Entry3
    Cells(NextRow, 8) = Entry4
    Exit Do
    Loop
End Sub
Изменено: alone_mech - 28.09.2017 16:29:34
Блокировка изменения ячейки после внесения данных.Ячейки с данными уже защищены паролем.
 
Тему можно закрывать, пошёл по пути изменения формы отчёта.
Огромное спасибо Влад, за помощь в решении задачи!
Блокировка изменения ячейки после внесения данных.Ячейки с данными уже защищены паролем.
 
К сожалению упёрся в недостаток знаний в макросах, при построении формы отчёта описанной Вами ранее, по этому вернулся к доработке уже имеющейся формы.
Если Вас не затруднит, подскажите, изменять выделенный пользователю диапазон нужно через оператор Range или искать что-то другое?
Изменено: alone_mech - 25.09.2017 21:34:46
Блокировка изменения ячейки после внесения данных.Ячейки с данными уже защищены паролем.
 
Может быть есть возможность уменьшать формулой или макросом допустимый для изменения диапазон ячеек (диапазон, который я разрешил для изменения каждому пользователю по паролю), после выполнения макроса на отсылку письма?
Прошу не судить строго - глубоких познаний инструментов Excel ещё нет. :oops:  
Изменено: alone_mech - 25.09.2017 10:57:12
Блокировка изменения ячейки после внесения данных.Ячейки с данными уже защищены паролем.
 
Добрый день! Столкнулся с проблемой при создании журнала регистрации заявок на нашем предприятии. Имеется производственный корпус со своими цехами, на каждый цех создан лист и установлена защита с доступом по паролю к ячейкам. У каждой службы свой пароль и диапазон, куда можно внести данные.
Вся загвоздка в том, чтобы запретить изменение уже внесённых данных после сохранения или закрытия документа.Пароль на защиту листа 0000.
Может быть я вообще не правильно построил форму отчёта?
Буду благодарен за помощь в решении данной задачи!
Изменено: alone_mech - 21.09.2017 13:49:15
Страницы: 1
Наверх