Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

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

Цитата:
Сообщение от rico1271 Посмотреть сообщение
Макрос не стал выкладывать в этом файле, дабы не позориться.
Вот это зря. Пользователи любят именно помогать с готовым, а не делать всю работу вместо ТС
__________________
Mailto: media.project@ukr.net
Aleksandr H. на форуме   Ответить с цитированием
Старый 19.06.2018, 10:49   #3
rico1271
 
Регистрация: 11.02.2014
Адрес: Хабаровск
Сообщений: 7
Репутация: 10
По умолчанию

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

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

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

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

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

в код страницы Лист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

__________________
Mailto: media.project@ukr.net
Aleksandr H. на форуме   Ответить с цитированием
Старый 20.06.2018, 06:00   #8
rico1271
 
Регистрация: 11.02.2014
Адрес: Хабаровск
Сообщений: 7
Репутация: 10
По умолчанию

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

Код:

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

__________________
Mailto: media.project@ukr.net
Aleksandr H. на форуме   Ответить с цитированием
Старый 21.06.2018, 06:09   #10
rico1271
 
Регистрация: 11.02.2014
Адрес: Хабаровск
Сообщений: 7
Репутация: 10
По умолчанию

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


14:17.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru