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" макрос делал записи с начала листа, а то да же после его очистки макрос запоминает куда писались последние данные и продолжает писать дальше, хотя строки выше пустые, помогает только удаление и новое создание листа.
1) С Application.OnTime не все так однозначно. Чтобы иметь возможность включать-выключать процедуру по таймеру - надо писать некую обвязку (минимум три процедуры), что-то типа: event-процедура, отмечающая вкл/выкл и вызывающая SET-процедуру ; SET-процедура, задающая параметры в зависимости от состояния вкл/выкл, устанавливающая основную WORK-процедуру и задающая OnTime (причем с использованием Shedule) ; рабочая процедура, заканчивающаяся вызовом SET-процедуры). Ну или так, как далее показано у _Boroda_ (старт-стоп-работа)...
2) Все зависит от того, как именно вы очищаете лист. Если отдельной процедурой (кодом), а не вручную - то имеет смысл переменную ПоследняяСтрока сделать глобальной (а не вычисляемой) и сбрасывать её значение при очистке листа. С другой стороны, если у вас данные заполняются без пропусков (т.е., например, первый столбец ведь всегда содержит время) - то конец данных можно искать не через .UsedRange (или .SpecialCells), а с помощью .CurrentRegion.
1) С Application.OnTime не все так однозначно. Чтобы иметь возможность включать-выключать процедуру по таймеру - надо писать некую обвязку (минимум три процедуры), что-то типа: event-процедура, отмечающая вкл/выкл и вызывающая SET-процедуру ; SET-процедура, задающая параметры в зависимости от состояния вкл/выкл, устанавливающая основную WORK-процедуру и задающая OnTime (причем с использованием Shedule) ; рабочая процедура, заканчивающаяся вызовом SET-процедуры). Ну или так, как далее показано у _Boroda_ (старт-стоп-работа)...
2) Все зависит от того, как именно вы очищаете лист. Если отдельной процедурой (кодом), а не вручную - то имеет смысл переменную ПоследняяСтрока сделать глобальной (а не вычисляемой) и сбрасывать её значение при очистке листа. С другой стороны, если у вас данные заполняются без пропусков (т.е., например, первый столбец ведь всегда содержит время) - то конец данных можно искать не через .UsedRange (или .SpecialCells), а с помощью .CurrentRegion.AndreTM
Skype: andre.tm.007 Donate: Qiwi: 9517375010
Сообщение отредактировал AndreTM - Воскресенье, 07.09.2014, 20:57
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 - вручную или при помощи кнопки - уже сами придумывайте. Ну или не в ячейку, а в какую-нибудь глобальную переменную. Также используйте "более стандартное" определение последней строки (см. в коде).
Например, можно как-то так: [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
AndreTM спасибо за ответ, про обвязку обязательно поищу информацию, так как сам только знакомлюсь с данным видом работы с excel. По второму вопросу, лист я очищаю просто в ручную, первый столбец всегда содержит время, спасибо за предложенный вами вариант.
AndreTM спасибо за ответ, про обвязку обязательно поищу информацию, так как сам только знакомлюсь с данным видом работы с excel. По второму вопросу, лист я очищаю просто в ручную, первый столбец всегда содержит время, спасибо за предложенный вами вариант.Vladimir2803
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
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
Я создал макрос который прописывает стоп в нужную ячейку В макрос General я добавил команду перезаписи ячейки со Стопом.
Так же добавил прописывание Стоп и Работает на определенных листах, так как макрос стал прописывать работает через каждые 10 секунд на любом листе где я нахожусь.
Я создал макрос который прописывает стоп в нужную ячейку В макрос General я добавил команду перезаписи ячейки со Стопом.
Так же добавил прописывание Стоп и Работает на определенных листах, так как макрос стал прописывать работает через каждые 10 секунд на любом листе где я нахожусь.
Да, все нормально. В итоге у Вас должно получиться примерно следующее: [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]
Код
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