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

Вход

Регистрация

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

 

= Мир MS Excel/Визуальная индикация выполнения макроса - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Визуальная индикация выполнения макроса (Макросы/Sub)
Визуальная индикация выполнения макроса
Lyova Дата: Четверг, 25.09.2014, 17:21 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Здравствуйте!

Не смог уменьшить файл до нужного размера, поэтому не приложил.

Суть проблемы:

В модуле кода Листа1 прописан код, событие которого инициирует процедуру подбора параметров при изменении данных листа:

[vba]
Код
Private Sub Worksheet_Calculate()
Dim a As Range, b As Range
Set a = Range("ER45:ER78")
Set b = Range("ES45:ES78")
If Sheets("Лист2").Range("B3") = 1 Then
For i = 1 To a.Count
If Abs(a.Cells(i).Value) > 1 Then
a.Cells(i).GoalSeek Goal:=0, ChangingCell:=b.Cells(i)
End If
Next
End If
End Sub
[/vba]

Процесс подбора параметров занимает около 30 секунд.

Как сделать так, чтобы находясь на листе Лист2 и меняя исходные данные, которые используются для расчетов на Листе 1, на экране появлялся индикатор выполнения макроса на Листе1?

Поискав в сети примеры "прогрессбаров", так и не смог применить их к своему примеру.

Заранее спасибо...
 
Ответить
СообщениеЗдравствуйте!

Не смог уменьшить файл до нужного размера, поэтому не приложил.

Суть проблемы:

В модуле кода Листа1 прописан код, событие которого инициирует процедуру подбора параметров при изменении данных листа:

[vba]
Код
Private Sub Worksheet_Calculate()
Dim a As Range, b As Range
Set a = Range("ER45:ER78")
Set b = Range("ES45:ES78")
If Sheets("Лист2").Range("B3") = 1 Then
For i = 1 To a.Count
If Abs(a.Cells(i).Value) > 1 Then
a.Cells(i).GoalSeek Goal:=0, ChangingCell:=b.Cells(i)
End If
Next
End If
End Sub
[/vba]

Процесс подбора параметров занимает около 30 секунд.

Как сделать так, чтобы находясь на листе Лист2 и меняя исходные данные, которые используются для расчетов на Листе 1, на экране появлялся индикатор выполнения макроса на Листе1?

Поискав в сети примеры "прогрессбаров", так и не смог применить их к своему примеру.

Заранее спасибо...

Автор - Lyova
Дата добавления - 25.09.2014 в 17:21
gling Дата: Четверг, 25.09.2014, 18:55 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2519
Репутация: 674 ±
Замечаний: 0% ±

2010
Цитата
на экране появлялся индикатор выполнения макроса на Листе1?
Как это? Нужна табличка на листе 2 типа "Извините сейчас работает макрос, Вы можете курить до окончания его работы". Так, или как то по другому?


ЯД-41001506838083
 
Ответить
Сообщение
Цитата
на экране появлялся индикатор выполнения макроса на Листе1?
Как это? Нужна табличка на листе 2 типа "Извините сейчас работает макрос, Вы можете курить до окончания его работы". Так, или как то по другому?

Автор - gling
Дата добавления - 25.09.2014 в 18:55
Lyova Дата: Четверг, 25.09.2014, 19:22 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Ну да, примерно так, но чтобы табличка была активной и показывала, например, изменяющиеся проценты выполнения или меняющуюся в зависимости от степени выполнения полосу индикатора. В общем, чтобы пользователю было понятно, что компьютер не висит, а происходит исполнение макроса
 
Ответить
СообщениеНу да, примерно так, но чтобы табличка была активной и показывала, например, изменяющиеся проценты выполнения или меняющуюся в зависимости от степени выполнения полосу индикатора. В общем, чтобы пользователю было понятно, что компьютер не висит, а происходит исполнение макроса

Автор - Lyova
Дата добавления - 25.09.2014 в 19:22
alex77755 Дата: Четверг, 25.09.2014, 20:34 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 362
Репутация: 64 ±
Замечаний: 0% ±

Статусбар использовать не подходит?


Могу помочь в VB6, VBA
Alex77755@mail.ru
 
Ответить
СообщениеСтатусбар использовать не подходит?

Автор - alex77755
Дата добавления - 25.09.2014 в 20:34
alex77755 Дата: Четверг, 25.09.2014, 21:06 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 362
Репутация: 64 ±
Замечаний: 0% ±

Вот где-то попадалось.
Скорее всего здесь
К сообщению приложен файл: ProgressIndicat.rar (48.9 Kb)


Могу помочь в VB6, VBA
Alex77755@mail.ru
 
Ответить
СообщениеВот где-то попадалось.
Скорее всего здесь

Автор - alex77755
Дата добавления - 25.09.2014 в 21:06
Lyova Дата: Четверг, 25.09.2014, 22:19 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Находил этот пример тоже, но не понимаю как к своему примеру прицепить, поскольку у меня макрос инициируется не не нажатием на кнопку, а событием другого листа.
Да и, честно говоря, громоздкий он очень (для меня). Пока не очень понимаю класс модули. Может можно как-то без этого обойтись?
 
Ответить
СообщениеНаходил этот пример тоже, но не понимаю как к своему примеру прицепить, поскольку у меня макрос инициируется не не нажатием на кнопку, а событием другого листа.
Да и, честно говоря, громоздкий он очень (для меня). Пока не очень понимаю класс модули. Может можно как-то без этого обойтись?

Автор - Lyova
Дата добавления - 25.09.2014 в 22:19
Hugo Дата: Четверг, 25.09.2014, 22:29 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Сказали ведь уже про статусбар. Выводите туда например значение i, ну и текст какой-нибудь.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеСказали ведь уже про статусбар. Выводите туда например значение i, ну и текст какой-нибудь.

Автор - Hugo
Дата добавления - 25.09.2014 в 22:29
Lyova Дата: Четверг, 25.09.2014, 22:57 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Мда...пока что прогресбар, что статусбар - темный лес:(
 
Ответить
СообщениеМда...пока что прогресбар, что статусбар - темный лес:(

Автор - Lyova
Дата добавления - 25.09.2014 в 22:57
AndreTM Дата: Четверг, 25.09.2014, 23:11 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
статусбар - темный лес

Что-то навроде такого (смотрите сами, я код не проверял):
[vba]
Код
Private Sub Worksheet_Calculate()
  Call MyReCalc
End Sub

Sub MyReCalc()
  Dim a As Range, b As Range

oldStatusBar = Application.DisplayStatusBar
Application.DisplayStatusBar = True
Application.StatusBar = "Перерасчёт..."

  Set a = Range("ER45:ER78")
  Set b = Range("ES45:ES78")
  If Sheets("Лист2").Range("B3") = 1 Then
   For i = 1 To a.Count
    If Abs(a.Cells(i).Value) > 1 Then
     a.Cells(i).GoalSeek Goal:=0, ChangingCell:=b.Cells(i)
    End If
    if i mod 5 = 0 then Application.StatusBar = "Перерасчёт..." & Round(i / a.Count * 100, 1) & "%"
   Next
  End If

Application.StatusBar = False
Application.DisplayStatusBar = oldStatusBar

End Sub
[/vba]


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
Сообщение
статусбар - темный лес

Что-то навроде такого (смотрите сами, я код не проверял):
[vba]
Код
Private Sub Worksheet_Calculate()
  Call MyReCalc
End Sub

Sub MyReCalc()
  Dim a As Range, b As Range

oldStatusBar = Application.DisplayStatusBar
Application.DisplayStatusBar = True
Application.StatusBar = "Перерасчёт..."

  Set a = Range("ER45:ER78")
  Set b = Range("ES45:ES78")
  If Sheets("Лист2").Range("B3") = 1 Then
   For i = 1 To a.Count
    If Abs(a.Cells(i).Value) > 1 Then
     a.Cells(i).GoalSeek Goal:=0, ChangingCell:=b.Cells(i)
    End If
    if i mod 5 = 0 then Application.StatusBar = "Перерасчёт..." & Round(i / a.Count * 100, 1) & "%"
   Next
  End If

Application.StatusBar = False
Application.DisplayStatusBar = oldStatusBar

End Sub
[/vba]

Автор - AndreTM
Дата добавления - 25.09.2014 в 23:11
Lyova Дата: Четверг, 25.09.2014, 23:36 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Спасибо огромное! Работает!

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

Можно ли как-то еще больше визуализировать, чтобы полоса индикатора была или хотя бы шрифт, которым фраза "пересчет" и значения процентов отображаются был пожирнее
 
Ответить
СообщениеСпасибо огромное! Работает!

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

Можно ли как-то еще больше визуализировать, чтобы полоса индикатора была или хотя бы шрифт, которым фраза "пересчет" и значения процентов отображаются был пожирнее

Автор - Lyova
Дата добавления - 25.09.2014 в 23:36
AndreTM Дата: Четверг, 25.09.2014, 23:49 | Сообщение № 11
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
Со статусбаром - ольше ничего особо не придумать.

Можно начать делать собственный прогрессбар (на модальной форме, шоб уж наверняка заблокировал все приложение и отправил юзера курить :) ), но смысл?

Так что если хотите "красивости" - всё равно надо разбираться с прогрессбарами-классами, написанными до вас.
Ну или всё же не надо жарить мозги процу? Зачем вы перерасчет запускаете при любых изменениях, да ещё с кучей подборов параметров? Нельзя разве сначала изменить все исходные данные, а затем - жмакнуть кнопку, делающую переасчет за один раз. И сюда же - прицепить красивые прогрессбары и т.п.
И что-то мне говорит о том, что, может быть, вам и подбор параметра не требуется, так что расчеты можно делать быстро...


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеСо статусбаром - ольше ничего особо не придумать.

Можно начать делать собственный прогрессбар (на модальной форме, шоб уж наверняка заблокировал все приложение и отправил юзера курить :) ), но смысл?

Так что если хотите "красивости" - всё равно надо разбираться с прогрессбарами-классами, написанными до вас.
Ну или всё же не надо жарить мозги процу? Зачем вы перерасчет запускаете при любых изменениях, да ещё с кучей подборов параметров? Нельзя разве сначала изменить все исходные данные, а затем - жмакнуть кнопку, делающую переасчет за один раз. И сюда же - прицепить красивые прогрессбары и т.п.
И что-то мне говорит о том, что, может быть, вам и подбор параметра не требуется, так что расчеты можно делать быстро...

Автор - AndreTM
Дата добавления - 25.09.2014 в 23:49
Lyova Дата: Пятница, 26.09.2014, 00:36 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Порылся на просторах, накопал более очевидную визуализацию (см.вложенный файл). Не сочтите за наглость (пардон за тавтологию). Не поможете вклеить (вариант 1) в Ваш вариант кода?

А без подборов никак нельзя. На одном листе исходные данные для расчета деятельности компании, в том числе в части условий лизинга техники и оборудования (ставка, сроки и т.д.). Лизинговые платежи рассчитываются аннуитетным методом, т.е. в расчетах подбирается равная сумма платежа каждый месяц, а эти суммы дальше идут в другие расчетные формы (CF, Баланс и т.д.). Соответственно, меняя любой из исходных показателей слетает весь график и надо делать подбор. Так он делается автоматически, а на кнопку каждый раз жать надо - лишнее действие
 
Ответить
СообщениеПорылся на просторах, накопал более очевидную визуализацию (см.вложенный файл). Не сочтите за наглость (пардон за тавтологию). Не поможете вклеить (вариант 1) в Ваш вариант кода?

А без подборов никак нельзя. На одном листе исходные данные для расчета деятельности компании, в том числе в части условий лизинга техники и оборудования (ставка, сроки и т.д.). Лизинговые платежи рассчитываются аннуитетным методом, т.е. в расчетах подбирается равная сумма платежа каждый месяц, а эти суммы дальше идут в другие расчетные формы (CF, Баланс и т.д.). Соответственно, меняя любой из исходных показателей слетает весь график и надо делать подбор. Так он делается автоматически, а на кнопку каждый раз жать надо - лишнее действие

Автор - Lyova
Дата добавления - 26.09.2014 в 00:36
Lyova Дата: Пятница, 26.09.2014, 00:40 | Сообщение № 13
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
упс...в предыдущем сообщении файл не прикрепился
К сообщению приложен файл: Sample_14-10-20.xls (20.5 Kb)
 
Ответить
Сообщениеупс...в предыдущем сообщении файл не прикрепился

Автор - Lyova
Дата добавления - 26.09.2014 в 00:40
AndreTM Дата: Пятница, 26.09.2014, 01:22 | Сообщение № 14
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
А с символами попроще это сделать было никак? Например:


Переделать вашу процедуру сами сможете? Или всё надо "за вас"?


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеА с символами попроще это сделать было никак? Например:


Переделать вашу процедуру сами сможете? Или всё надо "за вас"?

Автор - AndreTM
Дата добавления - 26.09.2014 в 01:22
Саня Дата: Пятница, 26.09.2014, 10:10 | Сообщение № 15
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
[vba]
Код
Application.StatusBar = "Выполнено: " & ip * 100 & "% " & String(ib, "|") & String(lenBar - ib, ".")
[/vba]


у меня было что-то подобное, но захотелось чего-то нового...
[vba]
Код
Option Explicit

Sub GetFor_()
     Dim lr As Long
     lr = 20000

     Dim r As Long, sStB As String
     Dim c As Integer
     For r = 2 To lr
         Application.StatusBar = sObrStr(r, lr) & sSuff(CInt(r / lr * 100))
         'ActiveWindow.ScrollRow = r - 1
         '        sStB = Application.StatusBar
         '
         '        For c = 1 To 100
         '            Application.StatusBar = sStB & sSuff(c)
         '            DoEvents
         '        Next c

         DoEvents
     Next r
     Application.StatusBar = False
End Sub

Function sObrStr(r As Long, lr As Long) As String
     sObrStr = "Обрабатывается строка:  " & sNumber(r) & "  из  " & sNumber(lr)
End Function

Function sSuff(c As Integer) As String
     sSuff = "   " & String$(c, ChrW(9607))
End Function

Function sNumber(lNum As Long) As String
     Dim sRes As String
      
     Dim sNum As String
     sNum = CStr(lNum)
      
     Dim i As Integer, iDig As Integer
     For i = 1 To Len(sNum)
         iDig = Mid(sNum, i, 1)
         sRes = sRes & sDigit(iDig)
     Next i
     sNumber = sRes
End Function

Function sDigit(iDig As Integer) As String
     If iDig = 0 Then
         sDigit = ChrW(9471)
     Else
         sDigit = ChrW(iDig + 10101)
     End If
End Function
[/vba]
 
Ответить
Сообщение
[vba]
Код
Application.StatusBar = "Выполнено: " & ip * 100 & "% " & String(ib, "|") & String(lenBar - ib, ".")
[/vba]


у меня было что-то подобное, но захотелось чего-то нового...
[vba]
Код
Option Explicit

Sub GetFor_()
     Dim lr As Long
     lr = 20000

     Dim r As Long, sStB As String
     Dim c As Integer
     For r = 2 To lr
         Application.StatusBar = sObrStr(r, lr) & sSuff(CInt(r / lr * 100))
         'ActiveWindow.ScrollRow = r - 1
         '        sStB = Application.StatusBar
         '
         '        For c = 1 To 100
         '            Application.StatusBar = sStB & sSuff(c)
         '            DoEvents
         '        Next c

         DoEvents
     Next r
     Application.StatusBar = False
End Sub

Function sObrStr(r As Long, lr As Long) As String
     sObrStr = "Обрабатывается строка:  " & sNumber(r) & "  из  " & sNumber(lr)
End Function

Function sSuff(c As Integer) As String
     sSuff = "   " & String$(c, ChrW(9607))
End Function

Function sNumber(lNum As Long) As String
     Dim sRes As String
      
     Dim sNum As String
     sNum = CStr(lNum)
      
     Dim i As Integer, iDig As Integer
     For i = 1 To Len(sNum)
         iDig = Mid(sNum, i, 1)
         sRes = sRes & sDigit(iDig)
     Next i
     sNumber = sRes
End Function

Function sDigit(iDig As Integer) As String
     If iDig = 0 Then
         sDigit = ChrW(9471)
     Else
         sDigit = ChrW(iDig + 10101)
     End If
End Function
[/vba]

Автор - Саня
Дата добавления - 26.09.2014 в 10:10
alex77755 Дата: Пятница, 26.09.2014, 10:17 | Сообщение № 16
Группа: Проверенные
Ранг: Обитатель
Сообщений: 362
Репутация: 64 ±
Замечаний: 0% ±

Цитата
накопал более очевидную визуализацию

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

не статусбар?
%)


Могу помочь в VB6, VBA
Alex77755@mail.ru
 
Ответить
Сообщение
Цитата
накопал более очевидную визуализацию

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

не статусбар?
%)

Автор - alex77755
Дата добавления - 26.09.2014 в 10:17
Alex_ST Дата: Пятница, 26.09.2014, 11:53 | Сообщение № 17
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3206
Репутация: 609 ±
Замечаний: 0% ±

2003
поскольку это все в левом нижнем углу, то на большом экране не бросается в глаза и можно просто не заметить
Если в упрощённой до предела процедуре Сани [vba]
Код
Sub GetFor_()
     Dim R&, lR&: lR = 20000
     For R = 2 To lR
        Application.StatusBar = "Обрабатотка: " & R & " из " & lR & "   " & String(CInt(R / lR * 100), ChrW(&H25A1))
        DoEvents
     Next R
     Application.StatusBar = False
End Sub
[/vba] убрать разрешение прерывания для обработки событий DoEvents, то пока идёт прогресс (цикл) никто ничего сделать не сможет - на экране будут висеть "часики".
Можно начать делать собственный прогрессбар (на модальной форме, шоб уж наверняка заблокировал все приложение и отправил юзера курить :) )
Вот именно! Для того, чтобы сделать "объяву" с прогресс-баром на середине экрана, нужно форму делать. А это мало того, что лень, но и кроме того препятствует свободной вставке кода "куда надо", т.к. кроме текста процедуры нужно будет ещё и модуль формы за собой таскать.



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Пятница, 26.09.2014, 11:54
 
Ответить
Сообщение
поскольку это все в левом нижнем углу, то на большом экране не бросается в глаза и можно просто не заметить
Если в упрощённой до предела процедуре Сани [vba]
Код
Sub GetFor_()
     Dim R&, lR&: lR = 20000
     For R = 2 To lR
        Application.StatusBar = "Обрабатотка: " & R & " из " & lR & "   " & String(CInt(R / lR * 100), ChrW(&H25A1))
        DoEvents
     Next R
     Application.StatusBar = False
End Sub
[/vba] убрать разрешение прерывания для обработки событий DoEvents, то пока идёт прогресс (цикл) никто ничего сделать не сможет - на экране будут висеть "часики".
Можно начать делать собственный прогрессбар (на модальной форме, шоб уж наверняка заблокировал все приложение и отправил юзера курить :) )
Вот именно! Для того, чтобы сделать "объяву" с прогресс-баром на середине экрана, нужно форму делать. А это мало того, что лень, но и кроме того препятствует свободной вставке кода "куда надо", т.к. кроме текста процедуры нужно будет ещё и модуль формы за собой таскать.

Автор - Alex_ST
Дата добавления - 26.09.2014 в 11:53
Lyova Дата: Пятница, 26.09.2014, 15:48 | Сообщение № 18
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Переделать вашу процедуру сами сможете? Или всё надо "за вас"?


Если "за меня", то буду благодарен. Это не потому, что мне лень, а действительно сам не смогу.
При исполнении Вашего кода знак "|" не появляется в динамике, проценты не меняются, как в Sub test3(). В течении всего выполнения висит не меняющаяся фраза "Выполняется 0%........"

Если в упрощённой до предела процедуре Сани


Спасибо за вариант, буду думать, как к своей ситуации применить
 
Ответить
Сообщение
Переделать вашу процедуру сами сможете? Или всё надо "за вас"?


Если "за меня", то буду благодарен. Это не потому, что мне лень, а действительно сам не смогу.
При исполнении Вашего кода знак "|" не появляется в динамике, проценты не меняются, как в Sub test3(). В течении всего выполнения висит не меняющаяся фраза "Выполняется 0%........"

Если в упрощённой до предела процедуре Сани


Спасибо за вариант, буду думать, как к своей ситуации применить

Автор - Lyova
Дата добавления - 26.09.2014 в 15:48
Lyova Дата: Пятница, 26.09.2014, 16:04 | Сообщение № 19
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Нашел почему так. В этом месте поменял

ib = round((i-1)/(a.count-1),3): ip = Int(ip*50)


на ip = round((i-1)/(a.count-1),3): ib = Int(ip*50)

Теперь все работает как надо. Еще раз спасибо, получилось вполне наглядно.
 
Ответить
СообщениеНашел почему так. В этом месте поменял

ib = round((i-1)/(a.count-1),3): ip = Int(ip*50)


на ip = round((i-1)/(a.count-1),3): ib = Int(ip*50)

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

Автор - Lyova
Дата добавления - 26.09.2014 в 16:04
AndreTM Дата: Пятница, 26.09.2014, 16:10 | Сообщение № 20
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
При исполнении Вашего кода знак "|" не появляется в динамике, проценты не меняются, как в Sub test3(). В течении всего выполнения висит не меняющаяся фраза "Выполняется 0%........"
А это у меня непроизвольная привычка - оставлять "ошибку для размышления" в быстрописном коде примера :)
Чтобы вопрошающий задумался и поразбирался...
Цитата
if i mod 5 = 0 then
ip = Round((i-1)/(a.count-1),3): ib = Int(ip*50)
Application.StatusBar = "Выполнено: " & ip * 100 & "% " & String(ib, "|") & String(50 - ib, ".")
end if
DoEvents


Skype: andre.tm.007
Donate: Qiwi: 9517375010


Сообщение отредактировал AndreTM - Пятница, 26.09.2014, 16:14
 
Ответить
Сообщение
При исполнении Вашего кода знак "|" не появляется в динамике, проценты не меняются, как в Sub test3(). В течении всего выполнения висит не меняющаяся фраза "Выполняется 0%........"
А это у меня непроизвольная привычка - оставлять "ошибку для размышления" в быстрописном коде примера :)
Чтобы вопрошающий задумался и поразбирался...
Цитата
if i mod 5 = 0 then
ip = Round((i-1)/(a.count-1),3): ib = Int(ip*50)
Application.StatusBar = "Выполнено: " & ip * 100 & "% " & String(ib, "|") & String(50 - ib, ".")
end if
DoEvents

Автор - AndreTM
Дата добавления - 26.09.2014 в 16:10
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Визуальная индикация выполнения макроса (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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