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

Вход

Регистрация

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

 

= Мир MS Excel/Анимация графиков на листе через Doevents - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Анимация графиков на листе через Doevents
t330 Дата: Четверг, 04.04.2019, 13:12 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 147
Репутация: 0 ±
Замечаний: 20% ±

Excel 2016
Всем добрый день!

Во вложении файл с примером анимации графиков функций на листах.
Поясните пожалуйста как работает код для листа "Пример-1" ниже.

Конкретно не понятен смысл вот этого блока (вопросы в комментах к строкам):

[vba]
Код

    If Example1IsRunning Then
        Example1IsRunning = False    '  Зачем публичная переменная Example1IsRunnin переводится в состояние False ?
        End   ' Эта команда означает выход их процедуры? Почему не написали Exit sub ?
    End If
    Example1IsRunning = True  
[/vba]

Полный код вот:

[vba]
Код


Option Explicit

Public Example1IsRunning As Boolean

Sub RunExample1()
    If Example1IsRunning Then
        Example1IsRunning = False
        End
    End If
    Example1IsRunning = True
    Do
        DoEvents
        ThisWorkbook.Worksheets("Пример-1").Range("Base") = _
            ThisWorkbook.Worksheets("Пример-1").Range("Base") + 0.25
        DoEvents
    Loop

End Sub

[/vba]
К сообщению приложен файл: animated_charts.xlsm (66.5 Kb)
 
Ответить
СообщениеВсем добрый день!

Во вложении файл с примером анимации графиков функций на листах.
Поясните пожалуйста как работает код для листа "Пример-1" ниже.

Конкретно не понятен смысл вот этого блока (вопросы в комментах к строкам):

[vba]
Код

    If Example1IsRunning Then
        Example1IsRunning = False    '  Зачем публичная переменная Example1IsRunnin переводится в состояние False ?
        End   ' Эта команда означает выход их процедуры? Почему не написали Exit sub ?
    End If
    Example1IsRunning = True  
[/vba]

Полный код вот:

[vba]
Код


Option Explicit

Public Example1IsRunning As Boolean

Sub RunExample1()
    If Example1IsRunning Then
        Example1IsRunning = False
        End
    End If
    Example1IsRunning = True
    Do
        DoEvents
        ThisWorkbook.Worksheets("Пример-1").Range("Base") = _
            ThisWorkbook.Worksheets("Пример-1").Range("Base") + 0.25
        DoEvents
    Loop

End Sub

[/vba]

Автор - t330
Дата добавления - 04.04.2019 в 13:12
Roman777 Дата: Четверг, 04.04.2019, 13:33 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
t330, End - прерывает процесс полностью, а Exit позволяет выйти из текущей функции:
можете побегать пошагово.
[vba]
Код
Sub tst()
    tst2
    MsgBox 1
End Sub
Sub tst2()
    'Exit Sub
    End
End Sub
[/vba]

Ну и отсюда можно сделать вывод, что
Public Example1IsRunning As Boolean

могут использовать, чтобы при повторном нажатии на кнопку, когда макрос уже запущен, макрос остановился.


Много чего не знаю!!!!
 
Ответить
Сообщениеt330, End - прерывает процесс полностью, а Exit позволяет выйти из текущей функции:
можете побегать пошагово.
[vba]
Код
Sub tst()
    tst2
    MsgBox 1
End Sub
Sub tst2()
    'Exit Sub
    End
End Sub
[/vba]

Ну и отсюда можно сделать вывод, что
Public Example1IsRunning As Boolean

могут использовать, чтобы при повторном нажатии на кнопку, когда макрос уже запущен, макрос остановился.

Автор - Roman777
Дата добавления - 04.04.2019 в 13:33
t330 Дата: Четверг, 04.04.2019, 14:00 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 147
Репутация: 0 ±
Замечаний: 20% ±

Excel 2016
Спасибо, вроде дошло.
То есть, при запуске процедуры переменная Example1IsRunning по-умолчанию имеет значение False ?
Странно, я думал булевые переменные при первичном объявлении имеют значение True...

Кстати, закомментил в в блоке строку Example1IsRunning = False и код все равно работает... Зачем она нужна тогда?

[vba]
Код


    If Example1IsRunning Then
        ' Example1IsRunning = False   
        End  
    End If
    Example1IsRunning = True  

[/vba]
 
Ответить
СообщениеСпасибо, вроде дошло.
То есть, при запуске процедуры переменная Example1IsRunning по-умолчанию имеет значение False ?
Странно, я думал булевые переменные при первичном объявлении имеют значение True...

Кстати, закомментил в в блоке строку Example1IsRunning = False и код все равно работает... Зачем она нужна тогда?

[vba]
Код


    If Example1IsRunning Then
        ' Example1IsRunning = False   
        End  
    End If
    Example1IsRunning = True  

[/vba]

Автор - t330
Дата добавления - 04.04.2019 в 14:00
_Boroda_ Дата: Четверг, 04.04.2019, 14:23 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 16718
Репутация: 6505 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
По идее сначала в общем случае переменная = Empty, но поскольку мы объявили ее булевой, то у нее есть только 2 варианта - True или False. Empty - это ну никак не True (ничего - это не ИСТИНА), так ведь? Остается False
Это так, типа объяснение на пальцах, нисколько на академичность не претендующее

А она и не нужна. End по-любому очищает все переменные и Example1IsRunning у нас снова становится False


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеПо идее сначала в общем случае переменная = Empty, но поскольку мы объявили ее булевой, то у нее есть только 2 варианта - True или False. Empty - это ну никак не True (ничего - это не ИСТИНА), так ведь? Остается False
Это так, типа объяснение на пальцах, нисколько на академичность не претендующее

А она и не нужна. End по-любому очищает все переменные и Example1IsRunning у нас снова становится False

Автор - _Boroda_
Дата добавления - 04.04.2019 в 14:23
  • Страница 1 из 1
  • 1
Поиск:

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