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

Вход

Регистрация

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

 

= Мир MS Excel/Остановка повторения макроса - Мир MS Excel

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

Excel 2007
Здравствуйте!
Есть макрос:

[vba]
Код
Sub General()
Dim vПоследняяСтрока As Long
vПоследняяСтрока = Worksheets("данные2").Range("A1").SpecialCells(xlLastCell).Row + 1
Worksheets("данные2").Cells(vПоследняяСтрока, 1).Value = Format(Now, "hh:mm:ss")
Worksheets("данные2").Cells(vПоследняяСтрока, 2).Value = Worksheets("Лист2").Range("C3").Value
Worksheets("данные2").Cells(vПоследняяСтрока, 3).Value = Worksheets("Лист2").Range("C5").Value
Application.OnTime Now + TimeValue("00:00:10"), "General"
End Sub
[/vba]

Помогите пожалуйста:
- Сделать кнопку ActiveX или сочетание клавиш что бы остановить его повторение.
- И что бы при очистке листа "Данные2" макрос делал записи с начала листа, а то да же после его очистки макрос запоминает куда писались последние данные и продолжает писать дальше, хотя строки выше пустые, помогает только удаление и новое создание листа.

Спасибо!
 
Ответить
СообщениеЗдравствуйте!
Есть макрос:

[vba]
Код
Sub General()
Dim vПоследняяСтрока As Long
vПоследняяСтрока = Worksheets("данные2").Range("A1").SpecialCells(xlLastCell).Row + 1
Worksheets("данные2").Cells(vПоследняяСтрока, 1).Value = Format(Now, "hh:mm:ss")
Worksheets("данные2").Cells(vПоследняяСтрока, 2).Value = Worksheets("Лист2").Range("C3").Value
Worksheets("данные2").Cells(vПоследняяСтрока, 3).Value = Worksheets("Лист2").Range("C5").Value
Application.OnTime Now + TimeValue("00:00:10"), "General"
End Sub
[/vba]

Помогите пожалуйста:
- Сделать кнопку ActiveX или сочетание клавиш что бы остановить его повторение.
- И что бы при очистке листа "Данные2" макрос делал записи с начала листа, а то да же после его очистки макрос запоминает куда писались последние данные и продолжает писать дальше, хотя строки выше пустые, помогает только удаление и новое создание листа.

Спасибо!

Автор - Vladimir2803
Дата добавления - 07.09.2014 в 12:30
AndreTM Дата: Воскресенье, 07.09.2014, 14:11 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
1) С Application.OnTime не все так однозначно. Чтобы иметь возможность включать-выключать процедуру по таймеру - надо писать некую обвязку (минимум три процедуры), что-то типа: event-процедура, отмечающая вкл/выкл и вызывающая SET-процедуру ; SET-процедура, задающая параметры в зависимости от состояния вкл/выкл, устанавливающая основную WORK-процедуру и задающая OnTime (причем с использованием Shedule) ; рабочая процедура, заканчивающаяся вызовом SET-процедуры).
Ну или так, как далее показано у _Boroda_ (старт-стоп-работа)...

2) Все зависит от того, как именно вы очищаете лист. Если отдельной процедурой (кодом), а не вручную - то имеет смысл переменную ПоследняяСтрока сделать глобальной (а не вычисляемой) и сбрасывать её значение при очистке листа. С другой стороны, если у вас данные заполняются без пропусков (т.е., например, первый столбец ведь всегда содержит время) - то конец данных можно искать не через .UsedRange (или .SpecialCells), а с помощью .CurrentRegion.


Skype: andre.tm.007
Donate: Qiwi: 9517375010


Сообщение отредактировал AndreTM - Воскресенье, 07.09.2014, 20:57
 
Ответить
Сообщение1) С Application.OnTime не все так однозначно. Чтобы иметь возможность включать-выключать процедуру по таймеру - надо писать некую обвязку (минимум три процедуры), что-то типа: event-процедура, отмечающая вкл/выкл и вызывающая SET-процедуру ; SET-процедура, задающая параметры в зависимости от состояния вкл/выкл, устанавливающая основную WORK-процедуру и задающая OnTime (причем с использованием Shedule) ; рабочая процедура, заканчивающаяся вызовом SET-процедуры).
Ну или так, как далее показано у _Boroda_ (старт-стоп-работа)...

2) Все зависит от того, как именно вы очищаете лист. Если отдельной процедурой (кодом), а не вручную - то имеет смысл переменную ПоследняяСтрока сделать глобальной (а не вычисляемой) и сбрасывать её значение при очистке листа. С другой стороны, если у вас данные заполняются без пропусков (т.е., например, первый столбец ведь всегда содержит время) - то конец данных можно искать не через .UsedRange (или .SpecialCells), а с помощью .CurrentRegion.

Автор - AndreTM
Дата добавления - 07.09.2014 в 14:11
Gustav Дата: Воскресенье, 07.09.2014, 14:14 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2747
Репутация: 1137 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Например, можно как-то так:
[vba]
Код
Sub General()
Dim vПоследняяСтрока As Long
       
If Worksheets("Лист3").Range("A1").Value = "стоп" Then Exit Sub
vПоследняяСтрока = Worksheets("данные2").Range("A" & Rows.Count).End(xlUp).Row + 1
'vПоследняяСтрока = Worksheets("данные2").Range("A1").SpecialCells(xlLastCell).Row + 1
       
Worksheets("данные2").Cells(vПоследняяСтрока, 1).Value = Format(Now, "hh:mm:ss")
Worksheets("данные2").Cells(vПоследняяСтрока, 2).Value = Worksheets("Лист2").Range("C3").Value
Worksheets("данные2").Cells(vПоследняяСтрока, 3).Value = Worksheets("Лист2").Range("C5").Value
Application.OnTime Now + TimeValue("00:00:10"), "General"
End Sub
[/vba]
Как слово "стоп" попадет в ячейку A1 листа Лист3 - вручную или при помощи кнопки - уже сами придумывайте. Ну или не в ячейку, а в какую-нибудь глобальную переменную. Также используйте "более стандартное" определение последней строки (см. в коде).


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Воскресенье, 07.09.2014, 14:18
 
Ответить
СообщениеНапример, можно как-то так:
[vba]
Код
Sub General()
Dim vПоследняяСтрока As Long
       
If Worksheets("Лист3").Range("A1").Value = "стоп" Then Exit Sub
vПоследняяСтрока = Worksheets("данные2").Range("A" & Rows.Count).End(xlUp).Row + 1
'vПоследняяСтрока = Worksheets("данные2").Range("A1").SpecialCells(xlLastCell).Row + 1
       
Worksheets("данные2").Cells(vПоследняяСтрока, 1).Value = Format(Now, "hh:mm:ss")
Worksheets("данные2").Cells(vПоследняяСтрока, 2).Value = Worksheets("Лист2").Range("C3").Value
Worksheets("данные2").Cells(vПоследняяСтрока, 3).Value = Worksheets("Лист2").Range("C5").Value
Application.OnTime Now + TimeValue("00:00:10"), "General"
End Sub
[/vba]
Как слово "стоп" попадет в ячейку A1 листа Лист3 - вручную или при помощи кнопки - уже сами придумывайте. Ну или не в ячейку, а в какую-нибудь глобальную переменную. Также используйте "более стандартное" определение последней строки (см. в коде).

Автор - Gustav
Дата добавления - 07.09.2014 в 14:14
Vladimir2803 Дата: Воскресенье, 07.09.2014, 14:33 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
AndreTM спасибо за ответ, про обвязку обязательно поищу информацию, так как сам только знакомлюсь с данным видом работы с excel.
По второму вопросу, лист я очищаю просто в ручную, первый столбец всегда содержит время, спасибо за предложенный вами вариант.
 
Ответить
СообщениеAndreTM спасибо за ответ, про обвязку обязательно поищу информацию, так как сам только знакомлюсь с данным видом работы с excel.
По второму вопросу, лист я очищаю просто в ручную, первый столбец всегда содержит время, спасибо за предложенный вами вариант.

Автор - Vladimir2803
Дата добавления - 07.09.2014 в 14:33
Vladimir2803 Дата: Воскресенье, 07.09.2014, 14:34 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Gustav Спасибо огромное, за помощь, обязательно проверю ваш вариант!!!
 
Ответить
СообщениеGustav Спасибо огромное, за помощь, обязательно проверю ваш вариант!!!

Автор - Vladimir2803
Дата добавления - 07.09.2014 в 14:34
Vladimir2803 Дата: Воскресенье, 07.09.2014, 16:43 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Gustav Еще раз большое спасибо, ваш вариант отлично работает!!!
Я создал макрос который прописывает стоп в нужную ячейку
В макрос General я добавил команду перезаписи ячейки со Стопом.

[vba]
Код
Sub Stop_G()
Range("A2").Select
ActiveCell.FormulaR1C1 = "Стоп"
Range("A3").Select
End Sub
[/vba]
[vba]
Код
Sub General()

Range("A2").FormulaR1C1 = "Работает"

Dim vПоследняяСтрока As Long

If Worksheets("Графики").Range("A2").Value = "Стоп" Then Exit Sub
vПоследняяСтрока = Worksheets("x;y").Range("A" & Rows.Count).End(xlUp).Row + 1
'vПоследняяСтрока = Worksheets("x;y").Range("A1").SpecialCells(xlLastCell).Row + 1

Worksheets("x;y").Cells(vПоследняяСтрока, 1).Value = Format(Now, "hh:mm:ss")
Worksheets("x;y").Cells(vПоследняяСтрока, 2).Value = Worksheets("Расчеты").Range("C3").Value
Worksheets("x;y").Cells(vПоследняяСтрока, 3).Value = Worksheets("Расчеты").Range("C5").Value
Application.OnTime Now + TimeValue("00:00:10"), "General"

End Sub
[/vba]
 
Ответить
СообщениеGustav Еще раз большое спасибо, ваш вариант отлично работает!!!
Я создал макрос который прописывает стоп в нужную ячейку
В макрос General я добавил команду перезаписи ячейки со Стопом.

[vba]
Код
Sub Stop_G()
Range("A2").Select
ActiveCell.FormulaR1C1 = "Стоп"
Range("A3").Select
End Sub
[/vba]
[vba]
Код
Sub General()

Range("A2").FormulaR1C1 = "Работает"

Dim vПоследняяСтрока As Long

If Worksheets("Графики").Range("A2").Value = "Стоп" Then Exit Sub
vПоследняяСтрока = Worksheets("x;y").Range("A" & Rows.Count).End(xlUp).Row + 1
'vПоследняяСтрока = Worksheets("x;y").Range("A1").SpecialCells(xlLastCell).Row + 1

Worksheets("x;y").Cells(vПоследняяСтрока, 1).Value = Format(Now, "hh:mm:ss")
Worksheets("x;y").Cells(vПоследняяСтрока, 2).Value = Worksheets("Расчеты").Range("C3").Value
Worksheets("x;y").Cells(vПоследняяСтрока, 3).Value = Worksheets("Расчеты").Range("C5").Value
Application.OnTime Now + TimeValue("00:00:10"), "General"

End Sub
[/vba]

Автор - Vladimir2803
Дата добавления - 07.09.2014 в 16:43
Vladimir2803 Дата: Воскресенье, 07.09.2014, 16:52 | Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Я создал макрос который прописывает стоп в нужную ячейку
В макрос General я добавил команду перезаписи ячейки со Стопом.


Так же добавил прописывание Стоп и Работает на определенных листах, так как макрос стал прописывать работает через каждые 10 секунд на любом листе где я нахожусь.

[vba]
Код
Worksheets("Графики").Range("A2").FormulaR1C1 = "Работает"
[/vba]
[moder]Оформляйте коды тегами (кнопка #)[/moder]
 
Ответить
Сообщение
Я создал макрос который прописывает стоп в нужную ячейку
В макрос General я добавил команду перезаписи ячейки со Стопом.


Так же добавил прописывание Стоп и Работает на определенных листах, так как макрос стал прописывать работает через каждые 10 секунд на любом листе где я нахожусь.

[vba]
Код
Worksheets("Графики").Range("A2").FormulaR1C1 = "Работает"
[/vba]
[moder]Оформляйте коды тегами (кнопка #)[/moder]

Автор - Vladimir2803
Дата добавления - 07.09.2014 в 16:52
Vladimir2803 Дата: Воскресенье, 07.09.2014, 17:08 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Возникла проблема подскажите как в макросе команду:
[vba]
Код

Worksheets("Графики").Range("A2").FormulaR1C1 = "Работает"
[/vba]
Выполнить только один раз а не каждые 10 секунд как весь макрос?


Сообщение отредактировал Vladimir2803 - Воскресенье, 07.09.2014, 17:11
 
Ответить
СообщениеВозникла проблема подскажите как в макросе команду:
[vba]
Код

Worksheets("Графики").Range("A2").FormulaR1C1 = "Работает"
[/vba]
Выполнить только один раз а не каждые 10 секунд как весь макрос?

Автор - Vladimir2803
Дата добавления - 07.09.2014 в 17:08
Vladimir2803 Дата: Воскресенье, 07.09.2014, 17:19 | Сообщение № 9
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Не знаю корректно или нет сделал запуск General через другой макрос

[vba]
Код

Sub Start_G()

Worksheets("Графики").Range("A2").FormulaR1C1 = "Работает"

Call General

End Sub
[/vba]


Сообщение отредактировал Vladimir2803 - Воскресенье, 07.09.2014, 17:20
 
Ответить
СообщениеНе знаю корректно или нет сделал запуск General через другой макрос

[vba]
Код

Sub Start_G()

Worksheets("Графики").Range("A2").FormulaR1C1 = "Работает"

Call General

End Sub
[/vba]

Автор - Vladimir2803
Дата добавления - 07.09.2014 в 17:19
_Boroda_ Дата: Воскресенье, 07.09.2014, 18:14 | Сообщение № 10
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Не знаю корректно или нет

Да, все нормально.
В итоге у Вас должно получиться примерно следующее:
[vba]
Код
Sub Start_G()
      If Worksheets("Графики").Range("A2") = "Стоп" Then Exit Sub
      Worksheets("Графики").Range("A2") = "Работает"
      General
End Sub
Sub Stop_G()
      Worksheets("Графики").Range("A2") = "Стоп"
End Sub
Sub General()
      If Worksheets("Графики").Range("A2") = "Стоп" Then Exit Sub
      Dim vПоследняяСтрока As Long
      With Worksheets("x;y")
          vПоследняяСтрока = .Range("A" & Rows.Count).End(xlUp).Row + 1
          .Cells(vПоследняяСтрока, 1) = Format(Now, "hh:mm:ss")
          .Cells(vПоследняяСтрока, 2) = Worksheets("Расчеты").Range("C3")
          .Cells(vПоследняяСтрока, 3) = Worksheets("Расчеты").Range("C5")
      End With
      Application.OnTime Now + TimeValue("00:00:10"), "General"
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
Не знаю корректно или нет

Да, все нормально.
В итоге у Вас должно получиться примерно следующее:
[vba]
Код
Sub Start_G()
      If Worksheets("Графики").Range("A2") = "Стоп" Then Exit Sub
      Worksheets("Графики").Range("A2") = "Работает"
      General
End Sub
Sub Stop_G()
      Worksheets("Графики").Range("A2") = "Стоп"
End Sub
Sub General()
      If Worksheets("Графики").Range("A2") = "Стоп" Then Exit Sub
      Dim vПоследняяСтрока As Long
      With Worksheets("x;y")
          vПоследняяСтрока = .Range("A" & Rows.Count).End(xlUp).Row + 1
          .Cells(vПоследняяСтрока, 1) = Format(Now, "hh:mm:ss")
          .Cells(vПоследняяСтрока, 2) = Worksheets("Расчеты").Range("C3")
          .Cells(vПоследняяСтрока, 3) = Worksheets("Расчеты").Range("C5")
      End With
      Application.OnTime Now + TimeValue("00:00:10"), "General"
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 07.09.2014 в 18:14
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Остановка повторения макроса (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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