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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.07.2018, 11:35   #1
Oleg34
Пользователь
 
Регистрация: 09.09.2011
Сообщений: 48
По умолчанию Не выполняет макрос при подключении модуля листа

Здравствуйте! У меня вопрос следующий:
Есть "Книга"-расчет месячной выработки, где первый "Лист"-Итоги. Последующие 31 лист это дни месяца. Каждый день я заношу данные, это дата, напротив фамилии ставлю 1, ячейка С26 суммирует общее кол-во работников. Потом в ячейки D30:H30 вношу общую выработку. Эти данные делятся на кол-во работников в данный день и рассчитывается средний и остаток. Эти все действия я выполняю встроенными функциями Excel. Дальше я подключаю макрос "Распределение_выработки". Для удобства я его вынес на панель быстрого доступа. Этот макрос раскидывает по каждому работнику. Теперь сама проблема. Ставить цифру 1 напротив фамилии присутствующего стало не интересно. Сначала решил поставить Флажок из конструктора ActiveX, но моих знаний (я просто любитель-самоучка) не хватило чтобы просчитывать в цикле поднятый флаг. На просторах инета нашел интересный код. Делаю следующее: ПКМ по иконке "ЛИСТ" - "исходный текст", открывается редактор, вставить процедуру и прописываю код:
Код:
'в один клик ставим галочку в диапазоне "C5:C23"

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub
        If Not Intersect(Target, Range("C5:C23")) Is Nothing Then
            Target.Font.Name = "Marlett"
            If Target = vbNullString Then
                Target = "a"
            Else
                Target = vbNullString
            End If
        End If
End Sub

'для подсчета проставленных галочек в ячейке С26 формула "=СЧЁТЕСЛИ(C5:C23;"a")"
Прекрасно код работает. Но перестает работать макрос "Распределение_выработки". Возвращаю все, как было, все работает?
В прикрепленном файле мой проект. Лист "1" с проставлением галочек, Лист "2" с проставлением цифры 1
Заранее спасибо за ответы
Вложения
Тип файла: rar Расчет выработки смен.rar (139.7 Кб, 10 просмотров)
Oleg34 вне форума Ответить с цитированием
Старый 30.07.2018, 20:08   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Цитата:
Сообщение от Oleg34 Посмотреть сообщение
Но перестает работать макрос "Распределение_выработки"
Работает. Но естественно только до
Код:
    With ActiveSheet
    'В ячейке В2 должна стоять дата!!!
    If Not IsDate(.[B2]) Then
        MsgBox "ОШИБКА В ДАТЕ!"
        Exit Sub
    End If
В чём проблема?

P.S. И кстати всю эту кучу макросов листов можно заменить одним макросом книги:
Код:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub
    If IsNumeric(Sh.Name) Then
        If Not Intersect(Target, Sh.Range("C5:C23")) Is Nothing Then
            Target.Font.Name = "Marlett"
            If Target = vbNullString Then
                Target = "a"
            Else
                Target = vbNullString
            End If
        End If
    End If
End Sub
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 30.07.2018 в 20:13.
Hugo121 вне форума Ответить с цитированием
Старый 30.07.2018, 20:39   #3
Oleg34
Пользователь
 
Регистрация: 09.09.2011
Сообщений: 48
По умолчанию

По дате это понятно. Но у меня не работает на галочку, при этом все раскидывает на "1". Я сделал скрины экрана. И огромное спасибо за совет, как сделать все одним макросом!!!!
Изображения
Тип файла: jpg Проставлена 1.jpg (114.5 Кб, 123 просмотров)
Тип файла: jpg Проставлена галочка.jpg (113.5 Кб, 110 просмотров)
Oleg34 вне форума Ответить с цитированием
Старый 30.07.2018, 20:55   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Т.е. нужно ставить не галочку, а 1? Ставьте
Там в коде нашёл строку
Код:
If .Cells(j, "C") = 1 Then Dict.Add s, 0
Вот вероятно тут 1 нужно заменить на "a"
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 30.07.2018 в 20:58.
Hugo121 вне форума Ответить с цитированием
Старый 30.07.2018, 21:12   #5
Oleg34
Пользователь
 
Регистрация: 09.09.2011
Сообщений: 48
По умолчанию

Огромное!!! Только сейчас дошло))) Кроме этого еще нужно поменять при расчете "по простому пути"
Код:
If .Cells(j, "C") = "a" Then .Cells(j, i + 3) = k
Oleg34 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос для переноса (с удалением) данных с одного листа на другой при появлении дополнительных данных в ячейке - MS Excel Тохес Microsoft Office Excel 2 15.03.2016 22:26
Макрос выполняет действия по замене и считает кол-во значений Bocul Microsoft Office Excel 5 28.06.2012 23:12
LNK2019 при подключении .h файла (при подключении .cpp все компилится) RomanA Visual C++ 3 16.04.2012 07:47
Макрос не выполняет, то что записал valerij Microsoft Office Excel 21 16.11.2010 23:41
как заставить работать макрос при защите листа qwertyuzer Microsoft Office Excel 4 11.02.2009 15:20