Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Код макроса автоматического счетчика - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Код макроса автоматического счетчика (Макросы/Sub)
Код макроса автоматического счетчика
andalexm Дата: Среда, 17.01.2018, 18:30 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Добрый день, уважаемые программисты! У меня имеется код макроса, который выполняет роль обыкновенного автоматического счетчика. Пояснение: работа всей схемы таблицы Excel состоит из последовательно идущих 4ёх шагов. На 1ом шаге вводятся цифровые значения вручную, на 2ом и 3ем шаге значения обрабатываются формулами, а на 4ом шаге работает макрос счетчика, который вычисляет данные из 3го шага. Счетчик отлично работает, начиная со 2го или 3го шага, но с 1 шага (куда я ввожу данные) он не работает (макрос выдает ошибку). На сколько я правильно понимаю, для полноценной работы схемы таблицы Excel необходимо перевести код макроса с события Change на событие Calculate. К сожалению, у меня уже опустились руки, чего я только не делал…. Не могли бы вы помочь мне в этом вопросе и добить уже в конце концов этот счетчик? Файл прилагаю.
К сообщению приложен файл: _Microsoft_Exce.xlsm (17.3 Kb)
 
Ответить
СообщениеДобрый день, уважаемые программисты! У меня имеется код макроса, который выполняет роль обыкновенного автоматического счетчика. Пояснение: работа всей схемы таблицы Excel состоит из последовательно идущих 4ёх шагов. На 1ом шаге вводятся цифровые значения вручную, на 2ом и 3ем шаге значения обрабатываются формулами, а на 4ом шаге работает макрос счетчика, который вычисляет данные из 3го шага. Счетчик отлично работает, начиная со 2го или 3го шага, но с 1 шага (куда я ввожу данные) он не работает (макрос выдает ошибку). На сколько я правильно понимаю, для полноценной работы схемы таблицы Excel необходимо перевести код макроса с события Change на событие Calculate. К сожалению, у меня уже опустились руки, чего я только не делал…. Не могли бы вы помочь мне в этом вопросе и добить уже в конце концов этот счетчик? Файл прилагаю.

Автор - andalexm
Дата добавления - 17.01.2018 в 18:30
nilem Дата: Среда, 17.01.2018, 19:04 | Сообщение № 2
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
andalexm, привет
может, все проще?
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Intersect(Target, Range("A3:A4")) Is Nothing Then Exit Sub
With Target(1, 4)
    .Value = .Value + 1
End With
End Sub
[/vba]


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениеandalexm, привет
может, все проще?
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Intersect(Target, Range("A3:A4")) Is Nothing Then Exit Sub
With Target(1, 4)
    .Value = .Value + 1
End With
End Sub
[/vba]

Автор - nilem
Дата добавления - 17.01.2018 в 19:04
andalexm Дата: Среда, 17.01.2018, 19:36 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Спасибо, что откликнулись nilem, но счетчик должен срабатывать в зависимости от шага 3 это обязательно, для этого я и расписал такую таблицу
 
Ответить
СообщениеСпасибо, что откликнулись nilem, но счетчик должен срабатывать в зависимости от шага 3 это обязательно, для этого я и расписал такую таблицу

Автор - andalexm
Дата добавления - 17.01.2018 в 19:36
nilem Дата: Среда, 17.01.2018, 19:51 | Сообщение № 4
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Но ведь шаг3 срабатывает только, когда что-то происходит на шаге1. Не так?


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеНо ведь шаг3 срабатывает только, когда что-то происходит на шаге1. Не так?

Автор - nilem
Дата добавления - 17.01.2018 в 19:51
andalexm Дата: Среда, 17.01.2018, 19:52 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
В последовательности должна срабатывать вся цепочка. К стати я попробовал подменить в вашем примере массив "A3:A4" на "С3:С4" и по прежнему не работает и похоже все потому, что в этих ячейках содержатся формулы
 
Ответить
СообщениеВ последовательности должна срабатывать вся цепочка. К стати я попробовал подменить в вашем примере массив "A3:A4" на "С3:С4" и по прежнему не работает и похоже все потому, что в этих ячейках содержатся формулы

Автор - andalexm
Дата добавления - 17.01.2018 в 19:52
andalexm Дата: Среда, 17.01.2018, 19:58 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Да вы правы это логично, но дело в том, что оригинальные формулы в С3:С4 собирают данные еще и с других ячеек. Этот пример таблицы я сделал попроще для понимания, хотя он и не логичен, но суть проблемы хорошо отображает.
 
Ответить
СообщениеДа вы правы это логично, но дело в том, что оригинальные формулы в С3:С4 собирают данные еще и с других ячеек. Этот пример таблицы я сделал попроще для понимания, хотя он и не логичен, но суть проблемы хорошо отображает.

Автор - andalexm
Дата добавления - 17.01.2018 в 19:58
nilem Дата: Среда, 17.01.2018, 20:10 | Сообщение № 7
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
А если так, "с доп. столбцом"
[vba]
Код
Private Sub Worksheet_Calculate()
Dim r As Range
For Each r In Range("C3:C4")
    If r <> r(1, 3) Then r(1, 2) = r(1, 2) + 1
    r(1, 3) = r
Next r
End Sub
[/vba]


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеА если так, "с доп. столбцом"
[vba]
Код
Private Sub Worksheet_Calculate()
Dim r As Range
For Each r In Range("C3:C4")
    If r <> r(1, 3) Then r(1, 2) = r(1, 2) + 1
    r(1, 3) = r
Next r
End Sub
[/vba]

Автор - nilem
Дата добавления - 17.01.2018 в 20:10
andalexm Дата: Среда, 17.01.2018, 20:16 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Сейчас попробую
 
Ответить
СообщениеСейчас попробую

Автор - andalexm
Дата добавления - 17.01.2018 в 20:16
andalexm Дата: Среда, 17.01.2018, 20:29 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Нет не работает, идет зацикливание и виснет Excel
 
Ответить
СообщениеНет не работает, идет зацикливание и виснет Excel

Автор - andalexm
Дата добавления - 17.01.2018 в 20:29
fan-vba Дата: Среда, 17.01.2018, 20:33 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 10 ±
Замечаний: 0% ±

Excel 2007
может так попробовать?

[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)

If Intersect(Target, Me.Range("A3:A4")) Is Nothing Then Exit Sub
If Target.Count > 1 Then Exit Sub

If IsEmpty(Target) Or Not IsNumeric(Target) Then
Exit Sub
Else
Target.Offset(0, 1) = Target.Value * 2
Target.Offset(0, 2) = Target.Offset(0, 1).Value * 2
Target.Offset(0, 3) = Target.Offset(0, 3) + 1
End If

End Sub
[/vba]

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


Сообщение отредактировал fan-vba - Среда, 17.01.2018, 20:47
 
Ответить
Сообщениеможет так попробовать?

[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)

If Intersect(Target, Me.Range("A3:A4")) Is Nothing Then Exit Sub
If Target.Count > 1 Then Exit Sub

If IsEmpty(Target) Or Not IsNumeric(Target) Then
Exit Sub
Else
Target.Offset(0, 1) = Target.Value * 2
Target.Offset(0, 2) = Target.Offset(0, 1).Value * 2
Target.Offset(0, 3) = Target.Offset(0, 3) + 1
End If

End Sub
[/vba]

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

Автор - fan-vba
Дата добавления - 17.01.2018 в 20:33
nilem Дата: Среда, 17.01.2018, 20:40 | Сообщение № 11
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
идет зацикливание и виснет Excel

Там нечему зацикливаться. Кроме Worksheet_Calculate все остальное уберите.


Яндекс.Деньги 4100159601573
 
Ответить
Сообщение
идет зацикливание и виснет Excel

Там нечему зацикливаться. Кроме Worksheet_Calculate все остальное уберите.

Автор - nilem
Дата добавления - 17.01.2018 в 20:40
andalexm Дата: Среда, 17.01.2018, 20:47 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
fan-vba ваш пример интересен, но он не последователен. Задача работы таблице состоит в том, что один шаг влияет на другой, тот на третий и в итоге в последнюю очередь включается счетчик макроса.
 
Ответить
Сообщениеfan-vba ваш пример интересен, но он не последователен. Задача работы таблице состоит в том, что один шаг влияет на другой, тот на третий и в итоге в последнюю очередь включается счетчик макроса.

Автор - andalexm
Дата добавления - 17.01.2018 в 20:47
andalexm Дата: Среда, 17.01.2018, 20:50 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
nilem да, я все делаю как вы говорите но в оригинальном файле зацикливается. Я сейчас ваш вариант еще прорабатываю, но пока не получается понять почему он у меня зацикливается. А так я все убрал кроме Worksheet_Calculate
 
Ответить
Сообщениеnilem да, я все делаю как вы говорите но в оригинальном файле зацикливается. Я сейчас ваш вариант еще прорабатываю, но пока не получается понять почему он у меня зацикливается. А так я все убрал кроме Worksheet_Calculate

Автор - andalexm
Дата добавления - 17.01.2018 в 20:50
andalexm Дата: Среда, 17.01.2018, 20:52 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
nilem вы можете расписать этот код ? Я его понять не могу)
If r <> r(1, 3) Then r(1, 2) = r(1, 2) + 1
r(1, 3) = r
Next r
 
Ответить
Сообщениеnilem вы можете расписать этот код ? Я его понять не могу)
If r <> r(1, 3) Then r(1, 2) = r(1, 2) + 1
r(1, 3) = r
Next r

Автор - andalexm
Дата добавления - 17.01.2018 в 20:52
andalexm Дата: Среда, 17.01.2018, 21:25 | Сообщение № 15
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
не пойму зачем только привязывать счетчик к 3 столбцу, если там стоят формулы на 1 столбец. Если надо привяжу к 3 столбцу

Насколько я понимаю параметр Target в макросе считывающий текстовое, а не численное значение ячейки. И воспринимающий считанный текст - как адрес ячейки. Ну при событии Kалькулейт - этот макрос будет срабатывать вообще при любом вычислении на листе по этому я и хочу весь макрос перевисти в Калькулейт. А формулы в оригинальном файле в шаге 3 собирают данные со многих других ячеек, вот поэтому для меня так важно вычисление счетчика именно с 3го шага с ячейки в которой содержится формула и вот в том случаи как эта формула выдаст любое новое значение должен сработать счетчик.
 
Ответить
Сообщение
не пойму зачем только привязывать счетчик к 3 столбцу, если там стоят формулы на 1 столбец. Если надо привяжу к 3 столбцу

Насколько я понимаю параметр Target в макросе считывающий текстовое, а не численное значение ячейки. И воспринимающий считанный текст - как адрес ячейки. Ну при событии Kалькулейт - этот макрос будет срабатывать вообще при любом вычислении на листе по этому я и хочу весь макрос перевисти в Калькулейт. А формулы в оригинальном файле в шаге 3 собирают данные со многих других ячеек, вот поэтому для меня так важно вычисление счетчика именно с 3го шага с ячейки в которой содержится формула и вот в том случаи как эта формула выдаст любое новое значение должен сработать счетчик.

Автор - andalexm
Дата добавления - 17.01.2018 в 21:25
Manyasha Дата: Среда, 17.01.2018, 21:40 | Сообщение № 16
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
andalexm, оформляйте коды тегами, кнопка # в режиме правки поста (выделить весь код - нажать на #).


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщениеandalexm, оформляйте коды тегами, кнопка # в режиме правки поста (выделить весь код - нажать на #).

Автор - Manyasha
Дата добавления - 17.01.2018 в 21:40
andalexm Дата: Среда, 17.01.2018, 21:56 | Сообщение № 17
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
оформляйте коды тегами, кнопка # в режиме правки поста (выделить весь код - нажать на #).

Спасибо, попробую. Утро вечера мудренее!!!
 
Ответить
Сообщение
оформляйте коды тегами, кнопка # в режиме правки поста (выделить весь код - нажать на #).

Спасибо, попробую. Утро вечера мудренее!!!

Автор - andalexm
Дата добавления - 17.01.2018 в 21:56
fan-vba Дата: Среда, 17.01.2018, 22:15 | Сообщение № 18
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 10 ±
Замечаний: 0% ±

Excel 2007
параметр target в данном коде не считывает никакие значения с ячейки, он определяет текущую ячейку, которую вы хотите изменить и тут не важно текст там или цыфры, а срабатывание именно на цифры здесь определяется условием
[vba]
Код
If IsEmpty(Target) Or Not IsNumeric(Target) Then
[/vba]
диапазон срабатывания данного кода описывается в строке
[vba]
Код
If Intersect(Target, Me.Range("A3:A4")) Is Nothing Then Exit Sub
[/vba]
т.е. данный макрос запустится только если изменяется значение в ячеках А3 и А4 (т.е. налюбые изменениия в столбцах B, C, D макос не реагирует), поэтому никаких калькулейт тут не надо.

Все дело в том, что я не вижу как на самом деле у вас организован оригинальный код. Метод с Target применим только для организации кода с ручным изменением данных в конкретных ячейках.
Если же вы тут говорите о последовательностях, то на 3 этапе у вас происходит пересчет программно и тут уже надо задаваться переменными и сравнивать до и после выполнения 3 шага. Тогда если эти значения будут различны - плюсовать счетчик
 
Ответить
Сообщениепараметр target в данном коде не считывает никакие значения с ячейки, он определяет текущую ячейку, которую вы хотите изменить и тут не важно текст там или цыфры, а срабатывание именно на цифры здесь определяется условием
[vba]
Код
If IsEmpty(Target) Or Not IsNumeric(Target) Then
[/vba]
диапазон срабатывания данного кода описывается в строке
[vba]
Код
If Intersect(Target, Me.Range("A3:A4")) Is Nothing Then Exit Sub
[/vba]
т.е. данный макрос запустится только если изменяется значение в ячеках А3 и А4 (т.е. налюбые изменениия в столбцах B, C, D макос не реагирует), поэтому никаких калькулейт тут не надо.

Все дело в том, что я не вижу как на самом деле у вас организован оригинальный код. Метод с Target применим только для организации кода с ручным изменением данных в конкретных ячейках.
Если же вы тут говорите о последовательностях, то на 3 этапе у вас происходит пересчет программно и тут уже надо задаваться переменными и сравнивать до и после выполнения 3 шага. Тогда если эти значения будут различны - плюсовать счетчик

Автор - fan-vba
Дата добавления - 17.01.2018 в 22:15
fan-vba Дата: Среда, 17.01.2018, 22:27 | Сообщение № 19
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 10 ±
Замечаний: 0% ±

Excel 2007
что оригинальные формулы в С3:С4 собирают данные еще и с других ячеек

не важно откуда собираются и как формируются формулы - главное что это формулы листа и они будут пересчитаны при изменении значений в ячеках А3 и А4 корректно и учитывая эти новые данные (главное чтобы подсчет значений на 3 этапе не был организован макросом )
Здесь важен 1 этап - ввод значений для пересчета формул и последний - изменение показаний счетчика, не вижу смысла обсуждать 2 и 3 этапы, т.к. там формулы и они автоматически все пересчитывают.


Сообщение отредактировал fan-vba - Среда, 17.01.2018, 22:32
 
Ответить
Сообщение
что оригинальные формулы в С3:С4 собирают данные еще и с других ячеек

не важно откуда собираются и как формируются формулы - главное что это формулы листа и они будут пересчитаны при изменении значений в ячеках А3 и А4 корректно и учитывая эти новые данные (главное чтобы подсчет значений на 3 этапе не был организован макросом )
Здесь важен 1 этап - ввод значений для пересчета формул и последний - изменение показаний счетчика, не вижу смысла обсуждать 2 и 3 этапы, т.к. там формулы и они автоматически все пересчитывают.

Автор - fan-vba
Дата добавления - 17.01.2018 в 22:27
andalexm Дата: Среда, 17.01.2018, 22:32 | Сообщение № 20
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Если же вы тут говорите о последовательностях, то на 3 этапе у вас происходит пересчет программно и тут уже надо задаваться переменными и сравнивать до и после выполнения 3 шага. Тогда если эти значения будут различны - плюсовать счетчик
Похоже так и есть.... Вы можете написать этот код который будет сравнивать выполнение до и после программного пересчета 3 шага ?
 
Ответить
Сообщение
Если же вы тут говорите о последовательностях, то на 3 этапе у вас происходит пересчет программно и тут уже надо задаваться переменными и сравнивать до и после выполнения 3 шага. Тогда если эти значения будут различны - плюсовать счетчик
Похоже так и есть.... Вы можете написать этот код который будет сравнивать выполнение до и после программного пересчета 3 шага ?

Автор - andalexm
Дата добавления - 17.01.2018 в 22:32
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Код макроса автоматического счетчика (Макросы/Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!