Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
2 / 2 / 0
Регистрация: 29.02.2016
Сообщений: 212

Скрытие/появление кнопки по значению в ячейке

31.10.2019, 07:23. Показов 3844. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток, гуру макросов и кода!

Есть недописанный код по появлению/скрытию кнопки в VBA.

Итак, в F6 вводится дата просрочки (дата1). В G высчитывается разница между датой просрочки и сегоняшним днём. В H показывается напоминание о запросе на продление срока годности, если разница в G составляет менее 15 дней (т.е. 14 и меньше). И в этом случае появляется кнопка, нажав на которую отправляется письмо с запросом на получение нового срока годности (дата2) (макрос на отправку письма я уже написал, как присвоть знаю, это не проблема).

Получив его, я вбиваю его ручками в I (дата2). В H при этом пропадает напоминалка о запросе, т.к. я его уже сделал, и появлется "Received". Ячейка в стоблце G ориентируется на "Received" (или на появление в I любого значения) и выдаёт ПУСТО, если таковая появляется. Дата1 (столбец I) при "Received" в H раскрашивается так, как будто значения там нет, но эта дата мне нужна будет потом для архива и пр. В стобце J считается разница между текущей датой и датой2.

Сейчас кнопка появляется при значении в G <15, теперь очень хотелось бы, чтобы кнопка появлялась при значении в G <15 и исчезала при появлении в I любого значения, кроме пусто, т.к. кроме даты там больше ничего не будет. Можно привязать и по появлению любого значения в J, кроме пусто. При этом дата1 (в F) должна остаться.

Итого, что нужно сделать:

1. Оставить триггер на появлении в I любого значения, и тогда кнопка должна скрыться.
2. Если невозможно сделать 1, то сделать, чтобы скрывалась кнопка по ПУСТО в F.
3. Если это возможно, то сделать такую кнопку для каждой строки, начиная от H и заканчивая бесконечностью

Буду рад любой помощи.
Вложения
Тип файла: zip Prolongation.zip (25.1 Кб, 8 просмотров)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.10.2019, 07:23
Ответы с готовыми решениями:

Скрытие вкладки по значению формулы в ячейке
Добрый день, уважаемые форумчане. Помогите реализовать следующую задачу: Имеется вкладка Ввод количества продуктов, на которой...

Как подсчитать сумму в итоговой ячейке по определенному значению если в ячейке есть буквы и цыфры
Добрый день, всем. Помогите пожалуйста, как можно посчитать сумму в итоговой ячейке по определенному критерию. Например: если в ячейке...

Появление/скрытие
Подскажите,как сделать так чтобы по нажатию на li появлялся один background, а если я нажимаю на второй li, то на первом background...

11
209 / 184 / 43
Регистрация: 02.08.2019
Сообщений: 586
Записей в блоге: 23
31.10.2019, 09:14
Breathe of fate, я скинул файл на почту вам, выложите итоговый сюда)

Надстройка: Macro Tools VBA – инструменты разработки макросов VBATools
0
2 / 2 / 0
Регистрация: 29.02.2016
Сообщений: 212
31.10.2019, 10:14  [ТС]
art1289,
отписался на почту. Вы сделали, что кнопка скрывается, если в I что-то есть, а мне нужно, чтобы она наоборот скрывалсь
0
209 / 184 / 43
Регистрация: 02.08.2019
Сообщений: 586
Записей в блоге: 23
31.10.2019, 10:20
Breathe of fate, поменяйте в коде вот это на оборот


Visual Basic
1
2
3
4
5
                If Target.Value = vbNullString Then
                    objShape.Visible = False
                Else
                    objShape.Visible = True
                End If
И файл выложите будьте добры)!

Добавлено через 17 секунд
false , true

Добавлено через 3 минуты
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub AddSapes()
    Dim i As Long, LastRow As Long
    Dim ShapeMaim As Shape
 
    With Worksheets(A_const.SH_MAIN)
        LastRow = .Cells(Rows.Count, 10).End(xlUp).Row
        Set ShapeMaim = .Shapes("main")
        'скрываю его тут можно менять видимость главного шейпа
        ShapeMaim.Visible = False
        For i = 6 To LastRow
            ShapeMaim.Copy
            .Cells(i, 8).Select
            .Paste
            Selection.Name = A_const.BTN_NAME & i
        Next i
    End With
End Sub
и тут на True если нужно тут - ShapeMaim.Visible = False
0
2 / 2 / 0
Регистрация: 29.02.2016
Сообщений: 212
31.10.2019, 10:40  [ТС]
art1289,
Работает, но не совсем так.

Надо, чтобы кнопка была скрыта, если в G значение меньше 15. И чтобы скрывалась, если в I появляется какое-либо значение.

Сейчас если в G значение больше 15 и I пусто - кнопка есть. И если в G пусто - кнопка тоже остаётся, а её быть не должно...

Файл с последними правками отправил на почту.
0
209 / 184 / 43
Регистрация: 02.08.2019
Сообщений: 586
Записей в блоге: 23
31.10.2019, 10:57
Breathe of fate,

опишите правильно условия я не пойму

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim lRow   As Long
    Dim iCol   As Integer
    Dim objShape As Shape
    If Target.Areas.Count > 1 Then Exit Sub
    lRow = Target.Row
    iCol = Target.Column
    ' запуск цикла только для столбика 9
    If iCol = 9 Or iCol = 6 And lRow >= 6 Then
        For Each objShape In Worksheets(A_const.SH_MAIN).Shapes
            If objShape.Name Like A_const.BTN_NAME & lRow Then
                If Cells(lRow, 9).Value <> vbNullString Then
                    objShape.Visible = False
                Else
                    objShape.Visible = True
                End If
                If Cells(lRow, 7).Value < 15 Then
                    objShape.Visible = True
                End If
            End If
        Next objShape
    End If
End Sub
Добавлено через 7 минут
в модуле B_Main, обратите внимание на процедуры AddSapes, DelSapes

так же Worksheet_Change можно сделать без цикла

Добавлено через 5 минут
без цикла вариант более быстрый

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim lRow   As Long
    Dim iCol   As Integer
    Dim objShape As Shape
    If Target.Areas.Count > 1 Then Exit Sub
    lRow = Target.Row
    iCol = Target.Column
    ' запуск цикла только для столбика 9 и 6 и строки меньше 6
    If iCol = 9 Or iCol = 6 And lRow >= 6 Then
        On Error Resume Next
        Set objShape = Worksheets(A_const.SH_MAIN).Shapes(A_const.BTN_NAME & lRow)
        If Cells(lRow, 9).Value <> vbNullString Then
            objShape.Visible = False
        Else
            objShape.Visible = True
        End If
        If Cells(lRow, 7).Value < 15 Then
            objShape.Visible = True
        End If
        On Error GoTo 0
    End If
End Sub
0
2 / 2 / 0
Регистрация: 29.02.2016
Сообщений: 212
31.10.2019, 10:58  [ТС]
art1289,

Если в G пусто, кнопка должна быть скрыта.
Если в G больше 15 - кнопка должна быть скрыта.
Если в G меньше 15 - кнопка должна быть показана.
Если в G меньше 15, а в I есть любое значение - кнопка должна быть скрыта.
Если в I пусто - кнопка должна быть скрыта.
0
209 / 184 / 43
Регистрация: 02.08.2019
Сообщений: 586
Записей в блоге: 23
31.10.2019, 11:20
Лучший ответ Сообщение было отмечено Breathe of fate как решение

Решение

Breathe of fate,

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim lRow   As Long
    Dim iCol   As Integer
    Dim objShape As Shape
    If Target.Areas.Count > 1 Then Exit Sub
    lRow = Target.Row
    iCol = Target.Column
    ' запуск цикла только для столбика 9 и 6 и строки меньше 6
    If iCol = 9 Or iCol = 6 And lRow >= 6 Then
        On Error Resume Next
        Set objShape = Worksheets(A_const.SH_MAIN).Shapes(A_const.BTN_NAME & lRow)
        'G или I пусто
        If Cells(lRow, 9).Value = vbNullString Or Cells(lRow, 7).Value = vbNullString Then
            objShape.Visible = False
        End If
        If Cells(lRow, 7).Value > 15 Then
            objShape.Visible = False
        Else
            If Cells(lRow, 9).Value <> vbNullString Then
                objShape.Visible = False
            Else
                objShape.Visible = True
            End If
        End If
     On Error GoTo 0
    End If
End Sub
1
2 / 2 / 0
Регистрация: 29.02.2016
Сообщений: 212
31.10.2019, 11:33  [ТС]
art1289,
огромное, большущее человеческое спасибо! Всё работает, как и должно!
0
209 / 184 / 43
Регистрация: 02.08.2019
Сообщений: 586
Записей в блоге: 23
31.10.2019, 11:35
Breathe of fate, обращайтесь)!
0
2 / 2 / 0
Регистрация: 29.02.2016
Сообщений: 212
31.10.2019, 11:36  [ТС]
Ну и выкладываю сам файлик для показательности.
Вложения
Тип файла: zip Prolongation2.zip (33.8 Кб, 24 просмотров)
1
209 / 184 / 43
Регистрация: 02.08.2019
Сообщений: 586
Записей в блоге: 23
31.10.2019, 11:40
Breathe of fate, на всякий случай еще продублирую

Обрати внимание на это - в модуле B_Main, обратите внимание на процедуры AddSapes, DelSapes

они создают и удаляют кнопки, если таблица будет расширяться то тужно их запускать вначале DelSapes
потом AddSapes учти это
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.10.2019, 11:40
Помогаю со студенческими работами здесь

появление/скрытие блока div
Подскажите как сделать появление/скрытие блока div при нажатие на кнопку у меня получается что блок div показан всегда и до нажатия...

Скрытие и появление дива по клику
Подскажите, что не так. Когда нажимаю на ссылку, то див раскрывается. Когда нажимаю снова на ссылку, то див скрывается. Но в скрытом...

Появление (скрытие) ScrollBar у контрола
В каком событии отловить факт появления(скрытия) полосы прокрутки?

Скрытие и появление объекта. Глобальные переменные
Это два вопроса.. 1) Как объявить глобальную переменную, которая будет использоваться всеми формами. У меня есть две формы, в одну...

Появление/скрытие форм. Где ошибка?
Есть программа. Там 2 формы. На главной форме есть кнопка. При нажатии главная форма скрывается, появляется дополнительная (именно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru