powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
25 сообщений из 44, страница 1 из 2
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36939615
alegarh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Написал макрос, там в цикле перерисовывается диаграмма.

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

Я кнопку нарисовал. В листе где она находиться прописал что делать когда она нажимается (может не правильно)

Код: plaintext
1.
2.
3.
Private Sub CommandButton1_Click()
i = LastRow
End Sub

Цикл в макросе задан следующим образом

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
    
   i =  0 
    

    Do While i < LastRow
    i = i +  1 
 
'  здесь идет перерисовка графика

    Loop

Как теперь внутрь цикла вставить, чтобы принажатии кнопки i становилось равным LastRow?

Заранее благодарен
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36939617
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вставить команду DoEvents в цикл (там, где у вас комментарий)
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36939630
alegarh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

В общем сработало программа остановилась, но из-за ошибки :)

Код: plaintext
Object variable or Width block not set

Надо просто DoEvents написать или имя кнопки указать тоже ?
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36939638
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alegarhShocker.Pro,

В общем сработало программа остановилась, но из-за ошибки :)

Код: plaintext
Object variable or Width block not set

Надо просто DoEvents написать или имя кнопки указать тоже ?

Покажите весь существенный код, включая определение переменных и укажите строку, на которой произошла ошибка
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36939639
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36939649
alegarh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
Sub Anim()

    i =  0 
    
    LastRow = Range("A10").CurrentRegion.Rows.Count -  2 
    
    tdelay = Range("I2:I2").Value

    Range("F2:F2").Value = LastRow
    

    Do While i < LastRow
    i = i +  1 
    yy = i +  7 
    a = "=Data!R" & yy & "C3:R" & yy & "C20"
    b = "=Data!R" & yy & "C21:R" & yy & "C38"
    
    ActiveChart.SeriesCollection( [b]1 ).Values = a[/b] ' ошибка появляется здесь
    ActiveChart.SeriesCollection( 2 ).Values = b
    ActiveChart.PlotArea.Select

    y = Timer + tdelay
    Do While Timer < y
'    DoEvents
    Loop
    
    DoEvents
    
    Loop
   
End Sub

Перед запуском щелкаю на диаграмму которая потом перерисовывается, иначе выскакивает таже ошибка. Про явное указание типов переменных, я уже где-то читал, но здесь не стал заморачиваться, чтобы еще не искать как переменные с помощью Dim определяются :). Но здесь я так понимаю это не причем. Здесь видимо когда я щелкаю на кнопку диаграмма перестает быть активной и программа не знает к чему применить команду ActiveChart.SeriesCollection(1).Values (насколько я понял).

Я раньше встречал вот такую команду
Код: plaintext
Sheets("Data").ChartObjects( 1 ).Activate
, но я не знаю как посмотреть какой у меня номер диаграммы.
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36939661
alegarh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
Sub Anim()

    i =  0 
    
    LastRow = Range("A10").CurrentRegion.Rows.Count -  2 
    
    tdelay = Range("I2:I2").Value

    Range("F2:F2").Value = LastRow
    

    Do While i < LastRow
    i = i +  1 
    yy = i +  7 
    a = "=Data!R" & yy & "C3:R" & yy & "C20"
    b = "=Data!R" & yy & "C21:R" & yy & "C38"
    
    Sheets("Data").ChartObjects( 1 ).Activate
    ActiveChart.SeriesCollection( 1 ).Values = a
    ActiveChart.SeriesCollection( 2 ).Values = b
    ActiveChart.PlotArea.Select

    y = Timer + tdelay
    Do While Timer < y
'    DoEvents
    Loop
    
    DoEvents
    
    Loop
   
End Sub
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36939665
alegarh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вытащил
Код: plaintext
Sheets("Data").ChartObjects( 1 ).Activate
т.к. по моему эта команда даже не давала на кнопку нажать.

Теперь после нажатия кнопки вылетает ошибка

Метод Select из класса Area завершен не верно

и дебаг ссылается на эту строку
Код: plaintext
ActiveChart.PlotArea.Select
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36939668
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alegarhПро явное указание типов переменных, я уже где-то читал, но здесь не стал заморачиваться
Но здесь я так понимаю это не причем

В результате переменная i тут:
Код: plaintext
1.
2.
Sub Anim()
    i =  0    
End Sub
и тут:
Код: plaintext
1.
2.
3.
Private Sub CommandButton1_Click()
i = LastRow
End Sub
это абсолютно разные переменные. И программированием второй вы ничего не добьетесь для первой.
Это ваша ошибка при работе с переменными.
Что же касается диаграмм мне сложнее дать совет, потому что я с ними очень мало работал.

ЗЫ: DoEvents - это дать возможность выполнить другие события, так что лучше вставьте во внутренний цикл.
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36939783
alegarh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro alegarhПро явное указание типов переменных, я уже где-то читал, но здесь не стал заморачиваться
Но здесь я так понимаю это не причем

В результате переменная i тут:
Код: plaintext
1.
2.
Sub Anim()
    i =  0    
End Sub
и тут:
Код: plaintext
1.
2.
3.
Private Sub CommandButton1_Click()
i = LastRow
End Sub
это абсолютно разные переменные. И программированием второй вы ничего не добьетесь для первой.
Это ваша ошибка при работе с переменными.
Что же касается диаграмм мне сложнее дать совет, потому что я с ними очень мало работал.

ЗЫ: DoEvents - это дать возможность выполнить другие события, так что лучше вставьте во внутренний цикл.

Так я и хотел остановить цикл за счет того, что указал I = LastRow, т.к. i становиться равной LasRow и должна выйти из цикла, т.к. условие выполнения цикла пока i < LastRow
Код: plaintext
Do While i < LastRow
Я правильно понял, что это не сработает? Тогда как остановить цикл кнопкой?

C графиками вопросов не осталось все работает прекрасно, надо только как то научиться выходить из цикла по желанию :)
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36939787
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alegarhЯ правильно понял, что это не сработает? Тогда как остановить цикл кнопкой?

это не сработает, потому что вы не хотите разбираться
- с оператором Dim
- с областями определения переменных
- с данным мной в FAQ советом
- в моем сообщении, в котором я сказал, что эти переменные "i" - это две разных переменных (так же, как и LastRow) и никакого отношения друг к другу не имеют
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36939793
alegarh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

я посмотрю определение переменных, но что-то слишком сложно получается. Я решил использовать i = LasRow как самое простое, что мне на ум пришло, но может быть есть другой способ. Например, при нажатии кнопки просто завершить выполнение подпрограммы.

Что нить типа, если кнопка нажата, то какой-нить параметр становиться True и тогда я смогу вставить If в котором, при True I = LastRow.
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36939804
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alegarh,

Ё-мое
я в третий раз вам повторяю, что проблема в том, что это РАЗНЫЕ переменные. Это неважно, что у них одинаковые имена, они определены в РАЗНЫХ процедурах.
Будет это LastRow или True - это неважно. Важно то, что переменная "i" в процедуре Anim не изменяется.
Чтобы она изменялась, вам нужно определить ее как глобальную или хотя бы на уровне модуля.

Если бы вы прочитали мою статью на ФАКе и последовали бы моему совету поставить Option Explicit, вы бы это уже давно поняли.
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36939869
alegarh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Спасибо, большое. Обязательно завтра прочитаю, как и говорил :)
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36939987
Фотография alex77755
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Public Флаг As Boolean
Public Sub Прерывание()
Флаг = True
Dim счёт As Double
Do
счёт = счёт +  1 
DoEvents
Loop While Флаг
MsgBox счёт
End Sub

Sub Кнопка1_Щелкнуть()
Флаг = False
End Sub
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36940170
alegarh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro alegarhЯ правильно понял, что это не сработает? Тогда как остановить цикл кнопкой?

это не сработает, потому что вы не хотите разбираться
- с оператором Dim
- с областями определения переменных
- с данным мной в FAQ советом
- в моем сообщении, в котором я сказал, что эти переменные "i" - это две разных переменных (так же, как и LastRow) и никакого отношения друг к другу не имеют

Прочитал я ваш FAQ только связи я никакой не вижу. Там же не написано как задать переменную чтобы она учавствовала в обоих подпрограммах. А это я как и писал уже раньше читал.
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36940184
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alegarhПрочитал я ваш FAQ только связи я никакой не вижу. Там же не написано как задать переменную чтобы она учавствовала в обоих подпрограммах. А это я как и писал уже раньше читал.
то есть вы вместо того, чтобы последовать умному совету решили все-таки поспорить на абстрактные темы :)

как только у вас появился бы Option Explicit, у вас сразу бы возник вопрос к самому себе, куда написать Dim и вопрос был бы решен.

К тому же, ответ на него уже дал alex77755
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36940187
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот нашёлся ещё один не знающий Оклиптик
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36940190
alegarh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex77755,

Спасибо, но теперь вообще работать перестало.

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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
Sub Anim()

    Option Explicit
    
    Public Flag As Boolean
    Dim i, yy, LastRow As Integer, a, b, c As String
    Dim y, tdelay As Double
    
    i =  0 
    Flag = True
    
    LastRow = Range("A10").CurrentRegion.Rows.Count -  2 
    
    tdelay = Range("I2:I2").Value

    Range("F2:F2").Value = LastRow
    
    Sheets("Data").ChartObjects( 1 ).Activate
    
    Do While i < LastRow
    i = i +  1 
    yy = i +  7 
    a = "=Data!R" & yy & "C3:R" & yy & "C20"
    b = "=Data!R" & yy & "C21:R" & yy & "C38"
    
    ActiveChart.SeriesCollection( 1 ).Values = a
    ActiveChart.SeriesCollection( 2 ).Values = b
    ActiveChart.PlotArea.Select
    
    c = "=Data!R" & yy & "C2"
    Range("G4:G4").Value = c

    y = Timer + tdelay
    Do While Timer < y
'        DoEvents
    Loop

     DoEvents
    
    If (Flag = False) Then
        i = LastRow
    End If
    
    Loop
  
End Sub

Sub CommandButton1_Click() 'Раньше эта подпрограмма была в Sheet1 я её перенес в Modul3 тудаже где и соновная. Зря? 
    Flag = False
End Sub

Теперь запускаю и сразу ошибка Compile error: Invalid Inside procedure и Debag на первую строчку Sub Anim
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36940194
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alegarh
Теперь запускаю и сразу ошибка Compile error: Invalid Inside procedure и Debag на первую строчку Sub Anim

1) Вам перевести ошибку?
2) Я ведь четко в факе написал:
авторНапишите в заголовке каждого своего модуля ( то есть перед всеми другими переменными, функциями и процедурами ):
Option Explicit

Если вы так внимательно будете слушать советы, вы эту, простенькую, в общем-то, задачу еще неделю решать будете
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36940195
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alegarh, Вас это: прервать работу любого макроса можно парой клавиш Ctrl+Break
Не устраивает?
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36940209
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProЕсли вы так внимательно будете слушать советы, вы эту, простенькую, в общем-то, задачу еще неделю решать будете
Также посмотрите внимательно, где alex77755 посоветовал вам определить переменную Flag и где вы ее определили.
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36940211
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProShocker.ProЕсли вы так внимательно будете слушать советы, вы эту, простенькую, в общем-то, задачу еще неделю решать будете
Также посмотрите внимательно, где alex77755 посоветовал вам определить переменную Flag и где вы ее определили.
Также внимательно посмотрите синтаксис Dim
Код: plaintext
1.
    Dim i As Integer, yy As Integer, LastRow As Integer, a As String, b As String, c As String
    Dim y As Double, tdelay As Double
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36940214
alegarh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ципихович Эндрю,

Вот это дельный совет :) C него и надо было начинать. Но не красиво как-то получается, ошибка выскакивает и т.п. Из любви к искуству хочеться сделать красиво :)

Я понимаю что это простенькая задача, но учитывая, что я первый раз позавчера вообще VBA открыл и с объектно-ориентированнм програмированием вообще не сталкивался, отсюда и все трудности.

Не знаю, я что тут напзывается процедурами и функциями. Включил автоматическую вставку Option Explicit, запустил Макрорекордер и тогда понял, что не туда вставил. Аналогом Option Explicit пользуюсь в фортране, но там она после заголовка программы вставляется вроде, на память не помню, всегда смотрю синтаксис по своим предыдущим програмкам.

Перевести я и сам могу только перевод мне ни о чем не говорит. "Неправильная внутренняя процедура". В общем поменял я все/ Заработало снова, но когда нажимаю кнопку стоп. Мне вылетает следующая ошибка Run Time Error 1004: Метод Select из класса PlotArea завершен не верно. Смысл было кнопку городить еслши все равно с ошибкой вылетает. Можно действительно Cntr+Breake и все :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
Option Explicit
Public Flag As Boolean
    
Public Sub Anim()


    Dim i, yy, LastRow As Integer, a, b, c As String
    Dim y, tdelay As Double
    
    i =  0 
    Flag = True
    
    LastRow = Range("A10").CurrentRegion.Rows.Count -  2 
    
    tdelay = Range("I2:I2").Value

    Range("F2:F2").Value = LastRow
    
    Sheets("Data").ChartObjects( 1 ).Activate
    
    Do While i < LastRow
    i = i +  1 
    yy = i +  7 
    a = "=Data!R" & yy & "C3:R" & yy & "C20"
    b = "=Data!R" & yy & "C21:R" & yy & "C38"
    
    ActiveChart.SeriesCollection( 1 ).Values = a
    ActiveChart.SeriesCollection( 2 ).Values = b
    ActiveChart.PlotArea.Select    ' debug идет сюда
    c = "=Data!R" & yy & "C2"
    Range("G4:G4").Value = c

    y = Timer + tdelay
    Do While Timer < y
'        DoEvents
    Loop

     DoEvents
    
    If (Flag = False) Then
        i = LastRow
    End If
    
    Loop
   
End Sub
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36940217
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alegarhМетод Select из класса PlotArea завершен не верно. Смысл было кнопку городить еслши все равно с ошибкой вылетает. Можно действительно Cntr+Breake и все :)

Если бы спрашивали, как остановить макрос, получили бы другой совет.

Я думаю, проблема в том, что как только вы уводите фокус с активной диаграммы на кнопку, у вас перестает быть актуальным объект ActiveChart. Замените его везде на:
Код: plaintext
Sheets("Data").ChartObjects( 1 )
...
Рейтинг: 0 / 0
25 сообщений из 44, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]