Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 22.12.2015
Сообщений: 22
1

Условие для срабатывания макроса

22.12.2015, 15:50. Показов 1506. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день друзья программисты, целый день ломаю голову. Дело в том что, я написал макрос чтоб скрывать пустые строки в определенном диапазоне, но понял что нужно еще одно условие. Хочу чтоб макрос срабатывал по определенному столбцу а не по всему диапазону, если есть соответствующий признак "да". Т.е. если в верхней ячейки имеется признак "да" то мой макрос сработал, иначе не срабатывает. Помогите пожалуйста, срочно нужно. Прикрепляю файл. На данный момент макрос выглядит так (она работает отлично), нужно дополнить лишь:
Visual Basic
1
2
3
4
5
6
7
8
9
Sub HideEmptyRow1()
Dim x As Range
Application.ScreenUpdating = False
On Error Resume Next
For Each x In Range("B2:B25").Rows
  If Evaluate("SUM(ABS(" & x.Address & "))") <> 0 Then Else x.EntireRow.Hidden = True
Next
Application.ScreenUpdating = True
End Sub
Вложения
Тип файла: xlsx Лист Microsoft Excel.xlsx (10.8 Кб, 6 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.12.2015, 15:50
Ответы с готовыми решениями:

Условие для макроса
Добрый день друзья программисты! Очень прошу помочь с написанием условия для макроса У меня...

Нужно найти причину торможения макроса (после срабатывания первого, второй макрос начинает сильно тормозить)
Здравствуйте. Нужна помощь. Проблема у меня такая: Я настроил эдакую систему макросов которые...

Условие макроса сравнение дат и времени работает не корректно.Как это исправить?
Sub Макрос_1() For i = 5 To Sheets(&quot;Ввод Данных&quot;).Range(&quot;A&quot; &amp; Rows.Count).End(xlUp).Row If...

Как избавиться от непроизвольного срабатывания макроса в Форме навигации?
Добрый день. Access 2013. Создал в базе форму навигации. На одной из закладок формы, при активации...

5
4135 / 2239 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
22.12.2015, 17:05 2
Формально так :

Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub HideEmptyRow2()
    If Range("B1") = "нет" Then Exit Sub
 
    Application.ScreenUpdating = False
    Dim x As Range
    For Each x In Range("B3:B25")
        x.EntireRow.Hidden = Not CBool(x)
    Next
    Application.ScreenUpdating = True
End Sub
Но, возможно, Вы хотите избавиться от столбца-константы B и скрывать строки только в столбце, где в шапке наличествует "да" , т.е. что-то типа этого :

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Sub HideEmptyRow2v2()
    Dim x As Range
    Set x = Rows(1).Find("да", , xlValues)
    If x Is Nothing Then Exit Sub
 
    Application.ScreenUpdating = False
    For Each x In x.Range("A3:A25")
        x.Rows.Hidden = Not CBool(x)
    Next
    Application.ScreenUpdating = True
End Sub
0
0 / 0 / 0
Регистрация: 22.12.2015
Сообщений: 22
22.12.2015, 17:23  [ТС] 3
попробовал с вашей формулой , и выяснил что она работает только на столбец B1, подскажите пожалуйста как мне сделать формулу чтоб срабатывало по такому же признаку на все столбцы, то есть на B1 она сработал именно так как я хотел, а если в ячеке E1 тоже признак "да" уже не срабатывает. Помогите плииз
0
4135 / 2239 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
22.12.2015, 17:34 4
Лучший ответ Сообщение было отмечено Azat333 как решение

Решение

Если признак "да" может быть только в одном столбце, то просто используйте второй вариант макроса.

Если же в нескольких, то желательно знать - критерий скрытия строки :
- если любая из ячеек пуста или содержит 0
- либо все ячейки должны быть пусты или 0
1
0 / 0 / 0
Регистрация: 22.12.2015
Сообщений: 22
22.12.2015, 17:41  [ТС] 5
спасибо вам большое, дома протестировал на первый взгляд все сработало отлично! Завтра на работу постараюсь применить в своих отчетах! Если вы не против напишу вам, при возникновении вопросов. Большое спасибо!
0
4135 / 2239 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
22.12.2015, 17:59 6
P.S. Если количество строк в таблице не постоянно, то вместо
Visual Basic
1
x.Range("A3:A25")
можно написать, например,
Visual Basic
1
Intersect(x.Worksheet.UsedRange, x.EntireColumn)
0
22.12.2015, 17:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.12.2015, 17:59
Помогаю со студенческими работами здесь

Условие отбора для макроса
Хочу сделать отчет удобным и мне пришла мысль сделать 2 отчета. 1-ый бы отображал только 3...

Условие срабатывания по нажатию определённых клавиш
Создал keylogger, а как сделать так чтобы при запуске он автоматически скрывал свою форму, и при...

Как сделать условие срабатывания RedirectMatch 301?
Есть редирект с html на без html RedirectMatch 301 /(.*).html$ /$1 нужно подтвердить права...

Условие повторения макроса (в конструкторе макросов)
Здравствуйте. Пожалуйста подскажите Что нужно записать в окошко &quot;условие повтора&quot; в конструкторе...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru