Страницы: 1
RSS
Отображение в процессе работы макроса
 
Вот допустим таймер. Если надо что цифры 05:00 поменялись на 00:01 так, чтоб я видел как мелькают промежуточные цифры.
или чтоб полоса загрузки закрасила строку от 0% до 100%
или чтоб я видел как квадратик перемещается по полям как в игре Снейк, а не телепортировался.
(то есть чтоб не приходилось запускать макрос повторным нажатием 100 раз)
любой такой пример подойдет
Изменено: Alexey795 - 01.05.2018 19:59:39
 
ProgressBar. Дорогу осилит идущий.
 
Если честно - слов много, а смысл из-за этого как-то размывается. Может оно? -Отобразить процесс выполнения кода
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
мне не столько был важен точный прогресбар (это был один из примеров)
теперь я знаю, что для него есть спец средства.
меня интересует сам принцип как делать так, чтоб то, что делает макрос, отображалось последовательно.
 
Что именно? Где отображать? Что Вы вообще хотите?
В коде -  DeBug.Print выведет информацию в окно Immediate Window...
 
Цитата
Alexey795 написал:
сам принцип как делать так, чтоб то, что делает макрос, отображалось последовательно
так вроде я дал ссылку - принцип там точно раскрыт. Даже в нескольких вариантах.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
допустим есть цикл
самый простой. он делает +1 к значению в ячейке
в итоге значение в ячейке меняется от A до D
можно ли сделать так, чтобы выдавало не сразу "D" в ячейку, а "A" "B" "C" "D" по очереди
главное чтобы отображалось все будто я зажал кнопку F8

я пролистал пару раз. там про полоску прогресса и про форму.
это как раз соответствет заголовку. я себе сохранил статью.
но я пытаюсь спросить про другое
 
Цитата
Alexey795 написал:
но я пытаюсь спросить про другое
но пока кроме Вас никто Вас не понимает...Например:
Цитата
Alexey795 написал:
+1 к значению в ячейкев итоге значение в ячейке меняется от A до D
это как +1 сделает от А до D? Какая связь вообще? Куда вбили? Где что отобразиться должно? Если делаем +1 - то почему где-то надо отображать +4?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
A и D это числа как в математике блин
если цикл выполнит команду 4 раза, то результатом будет значение_ячейки + 4
если команда +1 исполнится 104 раза, результатом будет значение_ячейки + 104

я всего лишь спросил, можно ли сделать так, чтобы отображалось то, как значение в ячейке меняется
т.е. в самой ячейке на листе иксель,
от числа A до значения D (это как пример)
чтоб в этой ячейке ПО ОЧЕРЕДИ появлялись значения число_А, число_B, число_C, число_D
пока макрос не остановится и не оставит итоговое значение
 
Сменить 4 числа - это тысячные доли секунды. Вы желаете эту работу затормозить до такой степени, чтоб насладиться процессом?
 
Цитата
Alexey795 написал:
A и D это числа как в математике блин
Давайте как минимум без блин. Тут Вам вроде никто не обязан ничем пока, чтобы блинкать. Если Вы объясняете так, что никому не понятно - наверное, имеет смысл чутка пересмотреть свои объяснения, может пример в файлике накидать, для большей ясности? Я вот например не помню, чтобы А и D считались числами, хоть в математике, хоть в физике. Хотя, может мы разные математики изучали, не знаю. Но если к А прибавить D - вряд ли мы получим какое-то вменяемое итоговое число, не так ли? Они могут быть какими-либо обозначениями величин или точек, для их более краткого написания. Но никак не самими числами. И если это какие-то величины - то нужно и их расшифровку тоже приложить, чтобы она была не только в Вашей голове.
Цитата
Alexey795 написал:
я всего лишь спросил, можно ли сделать так, чтобы отображалось то, как значение в ячейке меняется
нет. Вы спросили что-то другое. Если надо сохранять значение ячейки и прицеплять к нему следующее введенное - то это не одно и тоже, чтобы показать процесс
Цитата
Alexey795 написал:
есть цикл самый простой. он делает +1 к значению в ячейке в итоге значение в ячейке меняется от A до D
Вот здесь Вам как минимум надо прописать, что +1 к А это В, а не что-то другое. А может и что-то другое, кто его знает? Потому что если в ячейке забито А и мы сделали +1 - то программа не поймет, что надо сделать В, т.к. А+1 = ошибка, ибо текст нельзя использовать в математических операциях.

Цитата
Alexey795 написал:
в этой ячейке ПО ОЧЕРЕДИ появлялись значения число_А, число_B,
тогда смотрите в сторону Application.OnTime. Записали что-то в ячейке и, видимо, надо вызывать некую процедуру, в которой будет циклический вызов этой же процедуры и она будет записывать в ячейку что-то от начальной величины до конечной. Не знаю уж какой там у Вас порядок "чисел" в Вашем понимании. Или использовать Wait опять же с задержкой в секунду.
Я, правда, в упор не понимаю зачем это вообще надо. Тормозить процесс, когда этого можно избежать. Обычно как раз все надо оптимизацией бьются, а не над торможением.
В общем в итоге я все равно не понял какие действия Вы проделываете - цифры записываете или буквы и что такое +1: еще один проход цикла или прибавление единицы к ранее введенным значениям. В общем, накидал код. Правая кнопка мыши на ярлыке листа - Исходный код(или "исходный текст" в разных версиях Excel может различаться). Вставляете туда код:
Код
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address(0, 0) = "A1" Then
        Dim arr, s As String, lcnt As Long, i As Long, v
        arr = Array("A", "B", "C", "D")
        'если введенное число превышает кол-во элементов массива
        v = Target.Value
        lcnt = Val(v)
        If lcnt - 1 > UBound(arr) Then
            Exit Sub
        End If
        s = Target.Value
        With Application
            .EnableEvents = 0
            Target.Value = arr(0)
            .Wait Now + TimeValue("00:00:01")
            For i = 1 To lcnt - 1
                Target.Value = Target.Value & ", " & arr(i)
                .Wait Now + TimeValue("00:00:01")
            Next
            Target.Value = v
            .EnableEvents = 1
        End With
    End If
End Sub
теперь вбиваете в ячейку А1 число не больше 4-х. Наблюдаете, как меняются значения в ячейке.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Sub ttt()
   Range("a1") = "00:00:00"
   Do While CDate(Range("a1")) < CDate("00:04:59")
      Range("a1") = Range("a1") + CDate("00:00:01")
      Call lag
   Loop
End Sub

Sub lag()
   Dim a As Single
   a = Timer
   Do While Timer < a + 0.007
   Loop
End Sub
Изменено: Alexey795 - 27.08.2018 14:22:19
 
Цитата
Alexey795 написал:
меня интересует сам принцип как делать так, чтоб то, что делает макрос, отображалось последовательно.
чтобы то, что делает макрос отображалось последовательно, нужно последовательно отображать то, что делает макрос
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Доброе время суток
Цитата
Дмитрий Щербаков написал:
Я вот например не помню, чтобы А и D считались числами,
Дмитрий, ТС просто забыл как это формулируется в школе. Пусть A начальное значение переменной цикла, а D конечное. Тогда требуется в процессе цикла отображать изменение переменной цикла в относительном масштабе от 0 до 100% (за 100% принимаем D - A, а за 0 - A).
Но согласитесь, так же скучно писать, так сразу все поймут - никакой загадки :)
Страницы: 1
Наверх