Здравствуйте. Суть в том, что нужно чтобы фигура за определенное количество времени заданного в ячейке A1 проходила по прямой, к примеру, 975 пикселей. Написал код, но почему то после запуска виснет, и спустя заданное время (в ячейке A1), фигура мгновенно перемещает на нужно количество пикселей. Может кто знает как исправить код или знает иное решение?
Код
Sub OVAL()
ActiveSheet.Shapes.Range(Array("Овал 1")).IncrementLeft 975
DoEvents
Application.Wait (Now + TimeSerial(0, 0, Sheets("Лист2").Range("A2").Value))
End Sub
извините, из курса школьной математики, я знаю, что уравнение прямой имеет вид: y = A*x+B возможно, Вы учились в школе для особо одаренных детей и там все было по другому но в моих представлениях о прямой если y = 975*x то при изменении х всего на 1 значение у увеличилось на 975, это значит что точка преоделала путь в Корень(1^2+975^2) что будет явно больше, чем 975 т.е. путь от точки (х1, у1) до точки (х2, у2) если х изменился всего на 1 будет более 975 поэтому Вы не увидите ни какого перемещения от (х1, у1) до (х2, у2), потому что все произошло за 1 шаг.
в Вашей задаче необходимо знать 1. Уравнение прямой 2. начальное значение х (х0) 3. сколько шагов перемещения обьекта показать 4. х увеличивать или уменьшать (длина пути не зависит от направления пути)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Sub OVAL()
For i = 1 To 975
ActiveSheet.Shapes.Range(Array("Îâàë 1")).IncrementLeft 1
DoEvents
Application.Wait (Now + TimeSerial(0, 0, Sheets("Ëèñò2").Range("A2").Value))
Next i
End Sub
Суть в том, что нужно чтобы фигура за определенное количество времени заданного в ячейке A1 проходила по прямой, к примеру, 975 пикселей
Суть не изменилась.
Код
Private Sub CommandButton1_Click()
fa = True
Pi = Atn(1) * 4
If CommandButton1.Caption = "Пуск" Then
For i = 0 To 1060 Step 0.1
Call Smesch(i, Pi, L, H)
DoEvents
If Not fa Then Exit For
Next i
CommandButton1.Caption = "Старт"
Else
Call Smesch(0, Pi, L, H)
CommandButton1.Caption = "Пуск"
End If
End Sub
Sub Smesch(i, Pi, L, H)
L1 = L - 85 + i * 1.4
L2 = L1 + 85 - 80 * Sin(i / 180 * Pi)
On Error Resume Next
ActiveSheet.Shapes("Group 7").Rotation = i
If Err.Number = -2147024809 Then
Err.Clear
Exit Sub
End If
ActiveSheet.Shapes("Group 7").Left = L1
End Sub
Спасибо. Но я уже так пробовал до этого, скорость практически не меняется или в итоге становится слишком быстрой или медленной. Только уже как не пробовал. Всегда есть отклонения. И практически с каждым разом они изменяются.
Единственное, что у меня более менее приближенное к цели получилось, это изменение заранее рассчитанного шага. К примеру для одной секунды шаг 2 и так далее. Но все равно каждый раз в миллисекундах были отклонения.
С.М. спасибо вам большое, это в точности все что нужно было мне, теперь буду разбираться в коде, и за ссылку тоже спасибо, думал уже все что связанно с данной темой на форуме перечитал. Я сделал чтобы данные T и L выводились в ячейки, но почему то данные T в ячейке не совпадают с данными, которые выводятся в MsgBox. было
Код
MsgBox "T = " & Format(Timer - T0, "0.0")
изменил на
Код
Cells(1, 2) = Format(Timer - T0, "0.0")
кто подскажет что я сделал не так?
Изменено: nerf - 24.08.2016 21:22:37(Возник вопрос )