powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
44 сообщений из 44, показаны все 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
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36940226
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.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
[/quot]

Ой сколько читал, кто как настойчиво советует
А почему не так:
Код: plaintext
1.
2.
3.
Dim i As Integer, yy As Integer, LastRow As Integer
Dim a As String, b As String, c As String
Dim y As Double, tdelay As Double
Что сэкономили
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36940230
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alegarh,

Вы всё-таки приложите/вышлете образец вашего творчества в виде файла?
Поскольку ваш код настолько неоптимален, что все эти рассуждения о DoEvents и Ctrl+Break просто ничто...
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36940232
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович ЭндрюА почему не так:
тебе, ЦЭ, все можно, особенно переходить дорогу на красный свет.
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36940238
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProЦипихович ЭндрюА почему не так:
тебе, ЦЭ, все можно, особенно переходить дорогу на красный свет.

Добрый дяденька
Я же говорю, дискуссий много лучше занять больше места и не дискутировать, чтов ВБА проблема с длиной кода???

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Dim i As Integer 'комментарий
Dim yy As Integer
Dim LastRow As Integer
Dim a As String
Dim b As String
Dim c As String
Dim y As Double
Dim tdelay As Double

...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36940242
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович ЭндрюДобрый дяденька
Я же говорю, дискуссий много лучше занять больше места и не дискутировать, чтов ВБА проблема с длиной кода???
Чего ты прикопался? Я поправил у человека ошибку, а если тебе хочется подискутировать о том, сколько должно быть строк в твоем коде, заведи себе тему и там дискутируй.
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36940246
alegarh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProalegarhМетод Select из класса PlotArea завершен не верно. Смысл было кнопку городить еслши все равно с ошибкой вылетает. Можно действительно Cntr+Breake и все :)

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

Я думаю, проблема в том, что как только вы уводите фокус с активной диаграммы на кнопку, у вас перестает быть актуальным объект ActiveChart. Замените его везде на:
Код: plaintext
Sheets("Data").ChartObjects( 1 )


Да не конечно хочется сделать все хорошо, поэтому с кнопкой лучше :)

Я поменял везде

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
'    ActiveChart.SeriesCollection(1).Values = a
'    ActiveChart.SeriesCollection(2).Values = b
'    ActiveChart.PlotArea.Select
    
    Sheets("Data").ChartObjects( 1 ).SeriesCollection( 1 ).Values = a
    Sheets("Data").ChartObjects( 1 ).SeriesCollection( 2 ).Values = b
    Sheets("Data").ChartObjects( 1 ).PlotArea.Select

Но при запуске сразу ошибка 438: объект не поддерживает это свойство или метод.

Да даже не в этом дело. Почему вообще программа идет на следующий виток цикла, если я прописал

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
    Do While i < LastRow

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

    Loop

Она же после нажатия кнопки должна сделать i = LastRow проверить While < LastRow и выйти из цикла, а она опять внутрь заходит. Т.е. не срабатывает чтоли кнопка. Вывел в ячейку значение i. Так вот после кнопки STOP ни фига оно не LastRow, а остается таким же какое оно в цикле. Т.е. все-таки не срабатывает кнопка.

Код: plaintext
1.
2.
    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
    #36940256
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alegarhЯ поменял везде
Sheets("Data").ChartObjects(1).PlotArea.Select

Но при запуске сразу ошибка 438: объект не поддерживает это свойство или метод.


Тогда попробуйте ThisWorkbook.Charts(1)
Без вашего файла пробовать самому проблематично, поэтому я даю теоретические советы

alegarhДа даже не в этом дело. Почему вообще программа идет на следующий виток цикла, если я прописал

А кто сказал, что она идет на следующий виток? Не должна. Дело в том, что когда вы увели фокус с диаграммы, но еще не нажали на кнопку, цикл продолжает крутиться, соответственно активной диаграммы нет, вот и возникает ошибка.

alegarhОна же после нажатия кнопки должна сделать i = LastRow проверить While < LastRow и выйти из цикла, а она опять внутрь заходит. Т.е. не срабатывает чтоли кнопка. Вывел в ячейку значение i. Так вот после кнопки STOP ни фига оно не LastRow, а остается таким же какое оно в цикле. Т.е. все-таки не срабатывает кнопка.

Или выкладывайте файл и код или осваивайте трассировку.

alegarh
Поправил, только не понятно почему через запятую нельзя, в Фортране вроде можно одинаковые типы через запятую указывать.

Патамушта-марамушта.
Таков синтаксис, это не фортран. Мне претензии предъявлять бессмысленно.
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36940271
alegarh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProalegarhЯ поменял везде
Sheets("Data").ChartObjects(1).PlotArea.Select

Но при запуске сразу ошибка 438: объект не поддерживает это свойство или метод.


Тогда попробуйте ThisWorkbook.Charts(1)
Без вашего файла пробовать самому проблематично, поэтому я даю теоретические советы

alegarhДа даже не в этом дело. Почему вообще программа идет на следующий виток цикла, если я прописал

А кто сказал, что она идет на следующий виток? Не должна. Дело в том, что когда вы увели фокус с диаграммы, но еще не нажали на кнопку, цикл продолжает крутиться, соответственно активной диаграммы нет, вот и возникает ошибка.

alegarhОна же после нажатия кнопки должна сделать i = LastRow проверить While < LastRow и выйти из цикла, а она опять внутрь заходит. Т.е. не срабатывает чтоли кнопка. Вывел в ячейку значение i. Так вот после кнопки STOP ни фига оно не LastRow, а остается таким же какое оно в цикле. Т.е. все-таки не срабатывает кнопка.

Или выкладывайте файл и код или осваивайте трассировку.

alegarh
Поправил, только не понятно почему через запятую нельзя, в Фортране вроде можно одинаковые типы через запятую указывать.

Патамушта-марамушта.
Таков синтаксис, это не фортран. Мне претензии предъявлять бессмысленно.

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

Что такое трасировка я не знваю. Выложить хотел файл, но даже после того как я оставил в нем 3 строки в таблице, он занимает 170 лИ и не выкладывается.

Отправил вам и Andre_tm на почту указанную в профиле
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36940273
alegarh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro

Тогда попробуйте ThisWorkbook.Charts(1)
Без вашего файла пробовать самому проблематично, поэтому я даю теоретические советы



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

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

итак
1)
Код: plaintext
    Sheets("Data").ChartObjects( 1 ).Chart.SeriesCollection( 1 ).Values = a\n    Sheets("Data").ChartObjects( 1 ).Chart.SeriesCollection( 2 ).Values = b

2) зачем нужно вот это? вроде без нее все выглядит так же
Код: plaintext
    Sheets("Data").ChartObjects( 1 ).Chart.PlotArea.Select

3) ща разберусь с кнопкой стоп
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36940294
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
3) ща разберусь с кнопкой стоп
Тут тоже все понятно
вы определили переменную Flag ДВАЖДЫ
это опять оказались РАЗНЫЕ переменные.
Уберите определение переменной из модуля листа и все заработает

А еще я вам давал совет - сделать DoEvents во внутреннем цикле
иначе пока идет внутренний цикл, на кнопку нажать нельзя - получается дикое тупление

А еще лучше - не дожидайтесь окончания цикла задержки, а выходите сразу:
Код: plaintext
1.
2.
3.
    Do While Timer < y
        DoEvents
        If Flag Then Exit Do
    Loop
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36940298
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
А еще лучше - не дожидайтесь окончания цикла задержки, а выходите сразу:
Код: plaintext
1.
2.
3.
    Do While Timer < y
        DoEvents
        If Flag Then Exit Do
    Loop

сорри, у вас там наоборот, так что так:
Код: plaintext
1.
2.
3.
    Do While Timer < y
        DoEvents
        If Not Flag Then Exit Do
    Loop
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36940300
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProShocker.Pro
А еще лучше - не дожидайтесь окончания цикла задержки, а выходите сразу:
Код: plaintext
1.
2.
3.
    Do While Timer < y
        DoEvents
        If Flag Then Exit Do
    Loop

сорри, у вас там наоборот, так что так:
Код: plaintext
1.
2.
3.
    Do While Timer < y
        DoEvents
        If Not Flag Then Exit Do
    Loop

блин
вот так:
Код: plaintext
1.
2.
3.
4.
    Do While Timer < y
        DoEvents
        If Not Flag Then Exit Do
    Loop
    If Not Flag Then Exit Do
потому что надо выйти из двух циклов
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36940336
alegarh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProShocker.Proпропущено...

сорри, у вас там наоборот, так что так:
Код: plaintext
1.
2.
3.
    Do While Timer < y
        DoEvents
        If Not Flag Then Exit Do
    Loop

блин
вот так:
Код: plaintext
1.
2.
3.
4.
    Do While Timer < y
        DoEvents
        If Not Flag Then Exit Do
    Loop
    If Not Flag Then Exit Do
потому что надо выйти из двух циклов

Огромнейшее спасибо. Переменную Flag я второй раз определил, т.к. не работало. Вначале была в одном месте :)

Exit Do конечно же лучше, я где-то раньше спрашивал как просто выйти из цикла.

Еще раз огромное спасибо.
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36941396
Фотография alex77755
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Апочему сразу не закончить процедуру?
Код: plaintext
1.
2.
Do While Timer < y
        DoEvents
        If Not Flag Then Exit sub
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36941426
alegarh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex77755,

Ok :) Спасибо.
...
Рейтинг: 0 / 0
Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
    #36941455
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex77755Апочему сразу не закончить процедуру?
Код: plaintext
1.
2.
Do While Timer < y
        DoEvents
        If Not Flag Then Exit sub

после цикла могут быть еще какие-то нужные действия, поэтому не стал предлагать такой вариант
...
Рейтинг: 0 / 0
44 сообщений из 44, показаны все 2 страниц
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как вставить в макрос кнопку, чтобы останавливать цикл VBA Excell
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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