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

Макрос, который увеличивает значение ячейки А на 1 при изменении ячейки В

31.01.2019, 15:46. Показов 3549. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день.

Я написал макрос, который увеличивает значение ячейки А на 1 при изменении ячейки В, но почему то значение изменяется четко на 86. Я конечно сделал в ячейке С деление на 86, но все же мне интересно почему так происходит.
Код внизу:

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
Private Sub Worksheet_Change(ByVal Target As Range)
 
 
    'If Target.Address = "$2$4" Then
             
 
  x = Cells(2, 4).Value 'clock
  y = Cells(2, 6).Value 'flag
  
  If x = 1 And y = 1 Then
  
Cells(2, 7).Value = Cells(2, 7).Value + 1
 
Cells(2, 6).Value = 0 'сбросит флаг
 
  
If x = 0 And y = 0 Then
 
Cells(2, 6).Value = 1 'поднять флаг
 
   End If
 
 
 
End Sub
Добавлено через 8 минут
Также вслед предыдущему посту. Макрос очень медленно работает. Хотя макрос привязан к листу а не к книге. Как можно ускорить работу макроса?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.01.2019, 15:46
Ответы с готовыми решениями:

Получить новое значение ячейки DGV при ее изменении
Не могу найти способ получить новое значение ячейки при ее изменении, чтобы загнать его в sql...

Изменить значение ячейки при изменении другой (DBGrid,AdoTable)
Помогите пожалуйста. Как изменить значение ячейки при изменении другой? То есть я щелкаю допустим...

При изменении ячейки в таблице1, в таблицу2 сохранять это значение
как сделать так, чтобы при изменении ячейки в таблице1, в таблицу2 сохранялось это значение, но...

При изменении формата ячейки с даты на текст значение меняется неверно
Добрый день! Я написал программку для пасинга из экселя дней рождения сотрудников и выводу...

12
1846 / 1161 / 354
Регистрация: 11.07.2014
Сообщений: 4,105
31.01.2019, 16:03 2
gisli79, ваш макрос не должен работать - If ... Then есть, а End If где? Для начала почитайте про условные операторы. И слава богу, что ваш макрос короткий. А то был бы строк 100 да ещё две пустых строки на одну непустую ...
0
4135 / 2239 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
31.01.2019, 16:18 3
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, [D2,F2]) Is Nothing Then Exit Sub
    
    If [D2] = 1 And [F2] = 1 Then
       Application.EnableEvents = False
       [G2] = [G2] + 1
       [F2] = 0
       Application.EnableEvents = True
    End If
    '''
End Sub
1
0 / 0 / 0
Регистрация: 31.01.2019
Сообщений: 13
01.02.2019, 08:52  [ТС] 4
Добрый день, Pashulka.

Спасибо. Очень выручили.Без лишних слов.
0
0 / 0 / 0
Регистрация: 31.01.2019
Сообщений: 13
05.02.2019, 09:13  [ТС] 5
Добрый день.

Все работает, но при ссылке на ячейку D2 и F2 из другой ячейки (т.е. я меняю значение ячеек D2 и F2 не в самих ячейках, а в других, которых ссылаются на вышеуказанные), то макрос почему то не вызывается, хотя значения в ячейках D2 и F2 изменяются.
0
4135 / 2239 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
05.02.2019, 09:33 6
При пересчёте формул придётся использовать другое событие, а именно :

Visual Basic
1
2
3
4
5
6
7
Private Sub Worksheet_Calculate()
    If [D2] = 1 And [F2] = 1 Then
       'Application.EnableEvents = False '[1]
       [G2] = [G2] + 1
       'Application.EnableEvents = True '[2]
    End If
End Sub
Если изменение значений приводит к пересчёту формул, то необходимо раскомментировать две строки.
0
0 / 0 / 0
Регистрация: 31.01.2019
Сообщений: 13
06.02.2019, 12:25  [ТС] 7
Добрый день.

Спасибо большое. Помогло. Реализую мат.модель микросхемы счетчик ИЕ7 и других . С помощью формул в ячейке не получается т.к. счет идет по перепаду сигнала CLK, поэтому пытаюсь реализовать с помощью VBA (до этого никогда не пользовался). С Вашей помощью получилось.
0
0 / 0 / 0
Регистрация: 31.01.2019
Сообщений: 13
15.04.2019, 11:56  [ТС] 8
Добрый день.

При добавлении второго макроса, связанного с кнопкой сильно падает скорость выполнения макроса.
Если задать значение counter=10 т.е. подать 10 импульсов на вход счетчика 133ИЕ5, то выполнение
занимает время секунд 30. Не совсем понятно с чем связано такое падение скорости выполнения макроса.

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
28
29
30
31
32
Private Sub CommandButton1_Click()
 
For i = 1 To CInt([counter])
 
'импульс который направлен в ячейку [D2],
'[D2]-ячейка имитирующая вывод CLOCK в модели м/схемы счетчика 133ИЕ5
 
[H17] = 1
[H17] = 0
 
Next i
 
End Sub
 
Private Sub Worksheet_Calculate()
 
    If [D2] = 1 And [F2] = 1 Then
       Application.EnableEvents = False
       [G2] = [G2] + 1
       If [G2] = 16 Then [G2] = 0
       [F2] = 0
       Application.EnableEvents = True
    End If
        
    
    If [D2] = 0 And [F2] = 0 Then
       Application.EnableEvents = False
       [F2] = 1
       Application.EnableEvents = True
    End If
 
End Sub
0
4135 / 2239 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
15.04.2019, 12:22 9
Можете попробовать так, хотя сильно сомневаюсь, что это может...

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Worksheet_Calculate()
    Dim r1&, r2&, r3&
    r1 = Range("D2")
    r2 = Range("F2")
    
    Application.EnableEvents = False
    If r1 = 1 And r2 = 1 Then
       r3 = Range("G2")
       Range("G2") = IIf(r3 = 15, 0, r3 + 1)
       Range("F2") = 0: r2 = 0
    End If
     
    If r1 = 0 And r2 = 0 Then Range("F2") = 1
    Application.EnableEvents = True
End Sub
0
15153 / 6426 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
15.04.2019, 13:23 10
gisli79, в дополнение к pashulka,
1. Application.ScreenUpdating = False / True может сократить время в несколько раз;
2. Для сокращения числа обращения к ячейке можно использовать
Visual Basic
1
2
3
dim rClock as range
  set rClock=range("G2")
  rClock = (rClock + 1) Mod 16
0
0 / 0 / 0
Регистрация: 31.01.2019
Сообщений: 13
15.04.2019, 13:54  [ТС] 11
Большое спасибо за Ваши ответы.

Добавлено через 1 минуту
Application.ScreenUpdating = False / True может сократить время в несколько раз;

Это в качестве альтернативы строчкам: Application.EnableEvents = False/True?

Добавлено через 19 минут
Вопрос снимается
"
Application.ScreenUpdating = False / True может сократить время в несколько раз;

Это в качестве альтернативы строчкам: Application.EnableEvents = False/True? "
0
0 / 0 / 0
Регистрация: 31.01.2019
Сообщений: 13
16.04.2019, 15:55  [ТС] 12
Добрый день.

Возникла проблема. Макрос, который отлично работал при создании и отладке, перестал работать как положено.

Проблемная часть макроса, приведена внизу.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub Worksheet_Calculate()
 
   'Счетчик 133ИЕ7 - 1
   
   
    If [CLK_IE7] = 0 Then
       Application.EnableEvents = False
       [COUNTER_IE7] = [D4_IE7] * 8 + [D3_IE7] * 4 + [D2_IE7] * 2 + [D1_IE7]
       Application.EnableEvents = True
      
    End If
      
End Sub
При выставлении [CLK_IE7] в 0 макрос вычислял значение по формуле и помещал значение в ячейку [COUNTER_IE7].
Когда же данные в ячейку [CLK_IE7] стали поступать из ячейки, которая находится ниже то [CLK_IE7] изменяется как положено, а вычисление и помещение значения в ячейку [COUNTER_IE7] не происходит. Не могу понять в чем дело.

Добавлено через 16 минут
Когда же данные в ячейку [CLK_IE7] стали поступать из ячейки(значение в этой ячейке вычисляется автоматически по формуле), которая находится ниже то [CLK_IE7] изменяется как положено, а вычисление и помещение значения в ячейку [COUNTER_IE7] не происходит. Не могу понять в чем дело.
0
0 / 0 / 0
Регистрация: 31.01.2019
Сообщений: 13
19.04.2019, 14:00  [ТС] 13
Вопрос от 16.04 снят с повестки.
0
19.04.2019, 14:00
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.04.2019, 14:00
Помогаю со студенческими работами здесь

Макрос который по условию пропишет 0 в ячейки
Здравствуйте.В столбце Е ячейки хаотично заполнены значениями показывающие часы и минуты ,но часы...

Откорректировать макрос так, чтобы поиск осуществлялся не с ячейки А1, а с ячейки C21
Как в этом макросе прописать, чтобы поиск осуществлялся в столбике "С", но с 21-ой строки? Sub...

Макрос: Поиск совпадений, перенос совпавшей ячейки и рядом с ней стоящей ячейки
Доброго времени суток ! Прошу помощи с написанием макроса, очень очень очень выручите! Задача...

Как использовать макрос, который увеличивает/уменьшает картинку при щелчке на ней
Внизу приведён макрос, который нашёл на просторах инета, и он почему-то не запускается. А макрос...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Какой локальный веб-сервер выбрать
InfoMaster 19.01.2025
В современной веб-разработке локальные веб-серверы играют ключевую роль, предоставляя разработчикам надежную среду для создания, тестирования и отладки веб-приложений без необходимости использования. . .
Почему планшеты и iPad уже не так популярны, как раньше
InfoMaster 19.01.2025
Эра революционных инноваций История планшетных компьютеров началась задолго до того, как эти устройства стали привычными спутниками нашей повседневной жизни. В начале 1990-х годов появились первые. . .
Как самому прошить BIOS ноутбука
InfoMaster 19.01.2025
BIOS (Basic Input/ Output System) представляет собой важнейший компонент любого компьютера или ноутбука, который обеспечивает базовое взаимодействие между аппаратным и программным обеспечением. . .
Какой Linux выбрать для домашнего компьютера
InfoMaster 19.01.2025
Современные реалии выбора операционной системы В современном мире выбор операционной системы для домашнего компьютера становится все более важным решением, которое может существенно повлиять на. . .
Как объединить два словаря одним выражением в Python
InfoMaster 19.01.2025
В мире программирования на Python работа со словарями является неотъемлемой частью разработки. Словари представляют собой мощный инструмент для хранения и обработки данных в формате "ключ-значение". . . .
Как без исключения проверить существование файла в Python
InfoMaster 19.01.2025
При разработке программного обеспечения на Python часто возникает необходимость проверить существование файла перед выполнением операций с ним. Это критически важная задача, которая помогает избежать. . .
Как определить, содержит ли строка подстроку в JavaScript
InfoMaster 19.01.2025
При разработке веб-приложений часто возникает необходимость выполнять различные операции со строками, среди которых особое место занимает поиск подстрок. JavaScript предоставляет несколько встроенных. . .
Что такое метаклассы в Python
InfoMaster 19.01.2025
Метаклассы в Python представляют собой один из самых мощных и одновременно сложных механизмов языка, позволяющий программистам контролировать процесс создания классов. По своей сути, метакласс. . .
Как удалить свойство из объекта JavaScript
InfoMaster 19.01.2025
В современной веб-разработке объекты JavaScript играют фундаментальную роль в организации и структурировании данных. Они представляют собой контейнеры, которые хранят связанные данные и. . .
Какая разница между String и string в C#
InfoMaster 19.01.2025
В языке программирования C# существует интересная особенность: для работы со строками можно использовать как String, так и string. Эта двойственность часто вызывает вопросы у разработчиков, особенно. . .
Как в Git откатить репозиторий к предыдущему коммиту
InfoMaster 19.01.2025
В современной разработке программного обеспечения система контроля версий Git стала неотъемлемой частью рабочего процесса, предоставляя разработчикам мощные инструменты для управления изменениями в. . .
Как работают замыкания (closure) в JavaScript
InfoMaster 19.01.2025
В мире современной веб-разработки замыкания (closures) представляют собой один из фундаментальных концептов языка JavaScript, который часто вызывает затруднения у начинающих разработчиков, но при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru