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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2018, 05:23   #1
rico1271
 
Регистрация: 11.02.2014
Сообщений: 7
По умолчанию Наложить определенные ограничения на ячейки

Доброго времени суток, уважаемые гуру и посетители форума. Я немного дружу с компьютером, делаю для работы полезные считалки. Но хочется довести одну работу до ума. Не сочтите за хамство, помогите.
Разбираюсь с VB, но сложно, блин...
Итак, есть оборудование. Если оно в работе, на его мощность могут накладываться ограничения, его можно переводить в К-режим (К-режим это условность, что бы не забивать Вам голову лишней информацией). Мощность = (Мощность в номальном режиме) + (Дополнительная мощность в К-режиме) - (Ограничение мощности).
Если оборудование в работе, то я могу ставить галку "К-режим", вводить в ячейку ограничение мощности.
Если я отключаю оборудование в резерв, в ремонт, то в ячейке "Ограничение" должен быть установлен 0 и невозможность поставить другое значение. Галочка, привязанная к ячейке "К-режим" должна быть сброшена нет возможности ее установить.
Если я снова включаю оборудование, то снова могу манипулировать этими ячейками.
Я смог сделать макрос, который скидывает значения ячеек, нашел макрос, который накладывает ограничения, но блин, не хватает ума собрать их в кучу, работает либо одно либо другое.
Макрос не стал выкладывать в этом файле, дабы не позориться.
Заранее спасибо.
Вложения
Тип файла: zip Лист Microsoft Excel.zip (10.7 Кб, 11 просмотров)
rico1271 вне форума Ответить с цитированием
Старый 19.06.2018, 08:41   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от rico1271 Посмотреть сообщение
Макрос не стал выкладывать в этом файле, дабы не позориться.
Вот это зря. Пользователи любят именно помогать с готовым, а не делать всю работу вместо ТС
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 19.06.2018, 09:49   #3
rico1271
 
Регистрация: 11.02.2014
Сообщений: 7
По умолчанию

Ок, выкладываю с макросом, который сбрасывает значения ячеек при отключении оборудования. Только сильно не смейтесь.
Вложения
Тип файла: 7z Лист Microsoft Excel.7z (16.4 Кб, 7 просмотров)
rico1271 вне форума Ответить с цитированием
Старый 19.06.2018, 09:51   #4
rico1271
 
Регистрация: 11.02.2014
Сообщений: 7
По умолчанию

Другой файл с макросом, который блокирует ячейки.
rico1271 вне форума Ответить с цитированием
Старый 19.06.2018, 10:18   #5
rico1271
 
Регистрация: 11.02.2014
Сообщений: 7
По умолчанию

Забыл файл прикрепить, простите.
Вложения
Тип файла: zip Лист Microsoft Excel.zip (17.4 Кб, 9 просмотров)
rico1271 вне форума Ответить с цитированием
Старый 19.06.2018, 10:21   #6
rico1271
 
Регистрация: 11.02.2014
Сообщений: 7
По умолчанию

Второй макрос нашел в интернете на одном из форумов, как адаптировать для моей задачи ума не хватает. Он накладывает блокировку на ячейку "ограничение" на 1 единицу.
rico1271 вне форума Ответить с цитированием
Старый 19.06.2018, 11:22   #7
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Я бы такое набыдлокодил на первое время. Есть более разумные решения, но...их находят со временем.

в код страницы Лист1
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
    PerformClick Target
End Sub

Sub Assign()
' ЗАПУСКАТЬ ПОСЛЕ ОТКРыТИЯ КНИГИ или ПОВЕСИТЬ НА auto_open
  Dim CB As CheckBox
  For Each CB In ActiveSheet.CheckBoxes
    CB.OnAction = "CheckBoxChange"
  Next
End Sub

Sub enableevent()
' запускать если возник косяк при выполнении макроса. Перехват событий листа.
    Application.EnableEvents = True
End Sub

в код модуля Module1
Код:
Option Explicit

Sub CheckBoxChange()
    Dim trgt As Range
    Set trgt = ActiveSheet.Range(ActiveSheet.CheckBoxes(Application.Caller).LinkedCell)
    If Not (trgt Is Nothing) Then PerformClick trgt
End Sub

Sub PerformClick(Target As Range)
    Dim Stroka As Integer
   Dim Stolbec As Integer
   
   Stroka = Target.Row
   Stolbec = Target.Column
   Application.EnableEvents = False
   If Not (Intersect(Range("D3:D5"), Target) Is Nothing) Then
        If Target.Value <> "В работе" Then
            Target.Offset(0, 1) = 0
            Target.Offset(0, -1) = False
        Else
            Target.Offset(0, -1) = True
        End If
    ElseIf Not (Intersect(Range("E3:E5,C2:C5"), Target) Is Nothing) Then
        If Cells(Target.Row, "D").Value <> "В работе" Then
            Cells(Target.Row, "C") = False
            Cells(Target.Row, "E") = 0
        End If
   End If
   Application.EnableEvents = True
End Sub
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 20.06.2018, 05:00   #8
rico1271
 
Регистрация: 11.02.2014
Сообщений: 7
По умолчанию

Александр, Вы просто волшебник! Работает!!!
Не сочтите за наглость, можете объяснить логику работы кода.
Мне с Вашими объяснениями будет проще разобраться с нюансами
и окончательно адаптировать к своей задаче.
В любом случае большое, огромное СПАСИБО! Удачи и мира Вам и нашим народам!
rico1271 вне форума Ответить с цитированием
Старый 20.06.2018, 07:07   #9
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Код:
Sub Assign()
End Sub
так как я не нашел как добраться к событиям CheckBox'ов, а изменение статуса CheckBox не перехватывалось в Worksheet_Change, было решено поискать как реализовать "ручную" подписку на
событие "клика" на CheckBox. В результате получил код, который надо запускать при старте книги.
Для данного примера запускал вручную, если бы пришлось такое запускать каждый день, то, скорее всего, нашел бы в инете решение как это обойти.
Код:
Sub Assign()
End Sub
сообственно обработчик нажатия на CheckBox. Получает адрес ячейки, к которой привязан CheckBox и передает ее в метод обработки.
Код:
Sub CheckBoxChange()
End Sub
вспомогательной метод, который надо запускать если вдруг возникла ошибка во время выполнения обработки изменений на листе.
т.к. там отключается реакция екселя на события.
Код:
Sub enableevent()
End Sub
передаем в метод обработки ячеейк ячейку которая изменялась
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub

Код:
Sub PerformClick(Target As Range)
   ' Dim Stroka As Integer мусор!! можно удалить
   ' Dim Stolbec As Integer мусор!! можно удалить
   
   ' Stroka = Target.Row мусор!! можно удалить
   ' Stolbec = Target.Column мусор!! можно удалить
   Application.EnableEvents = False ' отключить события, что-бы не зациклиться
   
   ' был изменен статус оборудования
   ' изменить соседние ячейки   
   If Not (Intersect(Range("D3:D5"), Target) Is Nothing) Then 
        If Target.Value <> "В работе" Then
            Target.Offset(0, 1) = 0
            Target.Offset(0, -1) = False
        Else
            Target.Offset(0, -1) = True
        End If
	' был изменен статус CheckBox вручную или же с помощью выбора мышом.
	' делаем соответсвующие изменения
    ElseIf Not (Intersect(Range("E3:E5,C2:C5"), Target) Is Nothing) Then
        If Cells(Target.Row, "D").Value <> "В работе" Then
            Cells(Target.Row, "C") = False
            Cells(Target.Row, "E") = 0
        End If
   End If
   Application.EnableEvents = True ' включаем события
End Sub
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 21.06.2018, 05:09   #10
rico1271
 
Регистрация: 11.02.2014
Сообщений: 7
По умолчанию

Спасибо, разобрался, уже переделал под свою конкретную задачу, Sub Assign() повесил на автооткрытие. Удачи ВАМ!
rico1271 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
суммировать через определенные ячейки Iskin Microsoft Office Excel 4 29.12.2017 11:18
[VB] Копирование из Word в Excel: нужно переместить текст закладок из Word в определенные ячейки Excel. Broiler21 Помощь студентам 0 27.10.2017 14:41
хочу сделать так чтоб ограничения у всех были,а вот на определенном логине ибо id не было ограничения опыта martin123 PHP 2 31.03.2017 16:31
удалить строки содержащие определенные ячейки 123456789igor Общие вопросы Delphi 0 10.11.2012 00:15
Макрос, копируюший определенные ячейки строкой ниже Dellushka Microsoft Office Excel 12 12.11.2011 20:22