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

Вход

Регистрация

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

 

= Мир MS Excel/Создание прогресс-бара выполнения макроса - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Создание прогресс-бара выполнения макроса (Макросы/Sub)
Создание прогресс-бара выполнения макроса
Viper25 Дата: Четверг, 22.12.2016, 18:48 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 93
Репутация: 4 ±
Замечаний: 20% ±

Excel 2007
Здравствуйте.
Нужно создать прогресс-бар для наглядности работы макроса.
Нашел такой пример.
[vba]
Код
Sub Progress()
'
' Progress Bar
'
    Dim intIndex As Integer
    Dim sngPercent As Single
    Dim intMax As Integer
    
    intMax = 100
    For intIndex = 1 To intMax
        sngPercent = intIndex / intMax
        ProgressStyle1 sngPercent, chkPg1Value.Value
        DoEvents
        '------------------------
        ' Your code would go here
        '------------------------
        Sleep 100
    Next

End Sub
[/vba]
Но не получается.
Помогите, плиз.

Спасибо.
К сообщению приложен файл: Viper25-1-.xls (43.5 Kb)


Сообщение отредактировал Viper25 - Четверг, 22.12.2016, 18:49
 
Ответить
СообщениеЗдравствуйте.
Нужно создать прогресс-бар для наглядности работы макроса.
Нашел такой пример.
[vba]
Код
Sub Progress()
'
' Progress Bar
'
    Dim intIndex As Integer
    Dim sngPercent As Single
    Dim intMax As Integer
    
    intMax = 100
    For intIndex = 1 To intMax
        sngPercent = intIndex / intMax
        ProgressStyle1 sngPercent, chkPg1Value.Value
        DoEvents
        '------------------------
        ' Your code would go here
        '------------------------
        Sleep 100
    Next

End Sub
[/vba]
Но не получается.
Помогите, плиз.

Спасибо.

Автор - Viper25
Дата добавления - 22.12.2016 в 18:48
Udik Дата: Четверг, 22.12.2016, 19:41 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
ну вот пример простенький
[vba]
Код

Public Sub test()
Dim i As Integer, j As Double, k&

j = UserForm1.Width / 100
UserForm1.Show
UserForm1.Label1.Width = 1

For i = 1 To 100
UserForm1.Label1.Width = Int(i * j)
For k = 1 To 100000
Next k
DoEvents
Next
End Sub
[/vba]
К сообщению приложен файл: 0t.xlsm (24.2 Kb)


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
Сообщениену вот пример простенький
[vba]
Код

Public Sub test()
Dim i As Integer, j As Double, k&

j = UserForm1.Width / 100
UserForm1.Show
UserForm1.Label1.Width = 1

For i = 1 To 100
UserForm1.Label1.Width = Int(i * j)
For k = 1 To 100000
Next k
DoEvents
Next
End Sub
[/vba]

Автор - Udik
Дата добавления - 22.12.2016 в 19:41
Viper25 Дата: Четверг, 22.12.2016, 23:26 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 93
Репутация: 4 ±
Замечаний: 20% ±

Excel 2007
Udik, а как его внедрить в мой файл (в примере)?
 
Ответить
СообщениеUdik, а как его внедрить в мой файл (в примере)?

Автор - Viper25
Дата добавления - 22.12.2016 в 23:26
Udik Дата: Пятница, 23.12.2016, 12:59 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
Модуль формы скопировать сначала, потом в обычный модуль код процедуры.


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
СообщениеМодуль формы скопировать сначала, потом в обычный модуль код процедуры.

Автор - Udik
Дата добавления - 23.12.2016 в 12:59
Alex_ST Дата: Пятница, 23.12.2016, 13:27 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3208
Репутация: 609 ±
Замечаний: 0% ±

2003
Вообще-то очень удобно прогресс в статус-баре показывать.
Вот у меня в заначке лежит несколько примеров:
Обсуждалось на Планете



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеВообще-то очень удобно прогресс в статус-баре показывать.
Вот у меня в заначке лежит несколько примеров:
Обсуждалось на Планете

Автор - Alex_ST
Дата добавления - 23.12.2016 в 13:27
Udik Дата: Пятница, 23.12.2016, 13:33 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
Вообще-то очень удобно прогресс в статус-баре показывать.

Так обычно обновления экрана отрубают :)


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
Сообщение
Вообще-то очень удобно прогресс в статус-баре показывать.

Так обычно обновления экрана отрубают :)

Автор - Udik
Дата добавления - 23.12.2016 в 13:33
SLAVICK Дата: Пятница, 23.12.2016, 13:58 | Сообщение № 7
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Так обычно обновления экрана

Обновление экрана со статус баром не связано - действительно самый удобный способ - статусбар. и не нужно никаких юзерформ. Код работает сразу одинаково у всех.


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
Так обычно обновления экрана

Обновление экрана со статус баром не связано - действительно самый удобный способ - статусбар. и не нужно никаких юзерформ. Код работает сразу одинаково у всех.

Автор - SLAVICK
Дата добавления - 23.12.2016 в 13:58
Viper25 Дата: Пятница, 23.12.2016, 14:07 | Сообщение № 8
Группа: Пользователи
Ранг: Участник
Сообщений: 93
Репутация: 4 ±
Замечаний: 20% ±

Excel 2007
Подскажите, как прогресс-бар внедрить в мой файл (в примере в первом посте)?
 
Ответить
СообщениеПодскажите, как прогресс-бар внедрить в мой файл (в примере в первом посте)?

Автор - Viper25
Дата добавления - 23.12.2016 в 14:07
Alex_ST Дата: Пятница, 23.12.2016, 14:08 | Сообщение № 9
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3208
Репутация: 609 ±
Замечаний: 0% ±

2003
Обновление экрана со статус баром не связано
Это точно. Я отходил от компа и не успел сам ответить.
Спасибо, Слава.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
Сообщение
Обновление экрана со статус баром не связано
Это точно. Я отходил от компа и не успел сам ответить.
Спасибо, Слава.

Автор - Alex_ST
Дата добавления - 23.12.2016 в 14:08
Alex_ST Дата: Пятница, 23.12.2016, 14:16 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3208
Репутация: 609 ±
Замечаний: 0% ±

2003
Вызов своих процедур вставляйте между DoEvents и Next



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеВызов своих процедур вставляйте между DoEvents и Next

Автор - Alex_ST
Дата добавления - 23.12.2016 в 14:16
Udik Дата: Пятница, 23.12.2016, 14:18 | Сообщение № 11
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
обновление экрана со статус баром не связано

У меня лично не получается ничего показать в статусбаре при отключенном ScreenUpdating
К сообщению приложен файл: ___.xlsm (14.8 Kb)


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
Сообщение
обновление экрана со статус баром не связано

У меня лично не получается ничего показать в статусбаре при отключенном ScreenUpdating

Автор - Udik
Дата добавления - 23.12.2016 в 14:18
Alex_ST Дата: Пятница, 23.12.2016, 14:25 | Сообщение № 12
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3208
Репутация: 609 ±
Замечаний: 0% ±

2003
Странно... shock



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеСтранно... shock

Автор - Alex_ST
Дата добавления - 23.12.2016 в 14:25
sboy Дата: Пятница, 23.12.2016, 14:30 | Сообщение № 13
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
Добрый день.
Я тоже пользуюсь статусбаром, вот этот больше всего нравится
[vba]
Код
Sub StatusBar3()
    Dim lr As Long
    Dim lAllCnt As Long 'кол-во итераций
    Const lMaxQuad As Long = 20 'сколько квадратов выводить
    lAllCnt = 10000

    For lr = 1 To lAllCnt
        Application.StatusBar = "Выполнено: " & Int(100 * lr / lAllCnt) & "%" & String(CLng(lMaxQuad * lr / lAllCnt), ChrW(9632)) & String(lMaxQuad - CLng(lMaxQuad * lr / lAllCnt), ChrW(9633))
        DoEvents
    Next
    'очищаем статус-бар от значений после выполнения
    Application.StatusBar = False
End Sub
[/vba]
взял тут, там достаточно много вариантов и с ЮзерФорм тоже


Яндекс: 410016850021169
 
Ответить
СообщениеДобрый день.
Я тоже пользуюсь статусбаром, вот этот больше всего нравится
[vba]
Код
Sub StatusBar3()
    Dim lr As Long
    Dim lAllCnt As Long 'кол-во итераций
    Const lMaxQuad As Long = 20 'сколько квадратов выводить
    lAllCnt = 10000

    For lr = 1 To lAllCnt
        Application.StatusBar = "Выполнено: " & Int(100 * lr / lAllCnt) & "%" & String(CLng(lMaxQuad * lr / lAllCnt), ChrW(9632)) & String(lMaxQuad - CLng(lMaxQuad * lr / lAllCnt), ChrW(9633))
        DoEvents
    Next
    'очищаем статус-бар от значений после выполнения
    Application.StatusBar = False
End Sub
[/vba]
взял тут, там достаточно много вариантов и с ЮзерФорм тоже

Автор - sboy
Дата добавления - 23.12.2016 в 14:30
SLAVICK Дата: Пятница, 23.12.2016, 14:34 | Сообщение № 14
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
как прогресс-бар внедрить в мой файл

для конкретного файла - нужно добавить 4е раза строки:
[vba]
Код
  n = n + 1 / 4: p = 4 * n
  Application.StatusBar = "Выполнено: " & n * 100 & "% " & String(p, ChrW(8700)): DoEvents
[/vba]
К сообщению приложен файл: 2625741.xls (51.5 Kb)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
как прогресс-бар внедрить в мой файл

для конкретного файла - нужно добавить 4е раза строки:
[vba]
Код
  n = n + 1 / 4: p = 4 * n
  Application.StatusBar = "Выполнено: " & n * 100 & "% " & String(p, ChrW(8700)): DoEvents
[/vba]

Автор - SLAVICK
Дата добавления - 23.12.2016 в 14:34
SLAVICK Дата: Пятница, 23.12.2016, 14:40 | Сообщение № 15
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
при отключенном ScreenUpdating

так ScreenUpdating, и DisplayStatusBar - это разные вещи.
Конечно если вы его спрятали, то и не увидите.:
Вот см так:
[vba]
Код
Public Sub d()
    Application.ScreenUpdating = 0
    Application.StatusBar = "111111: " ':    DoEvents
    Application.ScreenUpdating = 1
    Application.StatusBar = False
End Sub
[/vba]

Спасибо, Слава.

beer


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
при отключенном ScreenUpdating

так ScreenUpdating, и DisplayStatusBar - это разные вещи.
Конечно если вы его спрятали, то и не увидите.:
Вот см так:
[vba]
Код
Public Sub d()
    Application.ScreenUpdating = 0
    Application.StatusBar = "111111: " ':    DoEvents
    Application.ScreenUpdating = 1
    Application.StatusBar = False
End Sub
[/vba]

Спасибо, Слава.

beer

Автор - SLAVICK
Дата добавления - 23.12.2016 в 14:40
Udik Дата: Пятница, 23.12.2016, 14:50 | Сообщение № 16
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
Конечно если вы его спрятали

ага, увидел


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
Сообщение
Конечно если вы его спрятали

ага, увидел

Автор - Udik
Дата добавления - 23.12.2016 в 14:50
Viper25 Дата: Пятница, 23.12.2016, 16:43 | Сообщение № 17
Группа: Пользователи
Ранг: Участник
Сообщений: 93
Репутация: 4 ±
Замечаний: 20% ±

Excel 2007
SLAVICK, спасибо.
 
Ответить
СообщениеSLAVICK, спасибо.

Автор - Viper25
Дата добавления - 23.12.2016 в 16:43
Viper25 Дата: Пятница, 23.12.2016, 19:11 | Сообщение № 18
Группа: Пользователи
Ранг: Участник
Сообщений: 93
Репутация: 4 ±
Замечаний: 20% ±

Excel 2007
SLAVICK, по Вашему примеру создал макрос, который работает в простом примере.
Открывает файл "12_TEMP.xlsx", берет данные и вставляет в файл "ALL".
Но если добавляю еще один блок "'Вставляем таблицу 2", макрос ругается.
[vba]
Код
Sub SBOR()
Application.ScreenUpdating = False
Application.CutCopyMode = False
Application.DisplayAlerts = False

'задаем путь к данным
Dim myPath As String
myPath = GetFolderPath
'Задаем часть имени файла - номер месяца
Dim Month As String
Month = Application.InputBox("Введите номер месяца", Type:=2)
'Задаем имя отчета
Dim Gorod As Excel.Workbook
Set Gorod = ThisWorkbook

'Вставляем таблицу 1
Dim filenameTEMP As String
filenameTEMP = myPath + "\" + Month + "_TEMP.xlsx"

  n = n + 1 / 2: p = 2 * n
  Application.StatusBar = "Выполнено: " & n * 100 & "% " & String(p, ChrW(8700)): DoEvents

Workbooks.Open Filename:=filenameTEMP, UpdateLinks:=False
Workbooks(Month + "_TEMP.xlsx").Worksheets("1").Range("A2:C10").Copy
Gorod.Worksheets("ALL").Range("A2:C10").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Workbooks(Month + "_TEMP.xlsx").Close

'Вставляем таблицу 2
Dim filenameTEMP As String
filenameTEMP = myPath + "\" + Month + "_TEMP.xlsx"

  n = n + 1 / 2: p = 2 * n
  Application.StatusBar = "Выполнено: " & n * 100 & "% " & String(p, ChrW(8700)): DoEvents

Workbooks.Open Filename:=filenameTEMP, UpdateLinks:=False
Workbooks(Month + "_TEMP.xlsx").Worksheets("2").Range("A2:C10").Copy
Gorod.Worksheets("ALL").Range("A12:C20").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Workbooks(Month + "_TEMP.xlsx").Close

Application.ScreenUpdating = True
Application.CutCopyMode = True
Application.DisplayAlerts = True
End Sub

Function GetFolderPath(Optional ByVal title As String = "Выберите папку", Optional ByVal initialPath As String = "P:\ФинДир\ОтделКонсолидации\Бюджет") As String
Dim PS As String: PS = Application.PathSeparator
    With Application.FileDialog(msoFileDialogFolderPicker)
        If Not Right(initialPath, 1) = PS Then initialPath = initialPath & PS
        .ButtonName = "Выбрать": .title = title: .InitialFileName = initialPath
        If .Show <> -1 Then Exit Function
        GetFolderPath = .SelectedItems(1)
        If Not Right(GetFolderPath, 1) = PS Then GetFolderPath = GetFolderPath & PS
    End With
End Function
[/vba]
К сообщению приложен файл: ALL.xlsm (16.5 Kb) · 12_TEMP.xlsx (11.0 Kb)


Сообщение отредактировал Viper25 - Пятница, 23.12.2016, 19:19
 
Ответить
СообщениеSLAVICK, по Вашему примеру создал макрос, который работает в простом примере.
Открывает файл "12_TEMP.xlsx", берет данные и вставляет в файл "ALL".
Но если добавляю еще один блок "'Вставляем таблицу 2", макрос ругается.
[vba]
Код
Sub SBOR()
Application.ScreenUpdating = False
Application.CutCopyMode = False
Application.DisplayAlerts = False

'задаем путь к данным
Dim myPath As String
myPath = GetFolderPath
'Задаем часть имени файла - номер месяца
Dim Month As String
Month = Application.InputBox("Введите номер месяца", Type:=2)
'Задаем имя отчета
Dim Gorod As Excel.Workbook
Set Gorod = ThisWorkbook

'Вставляем таблицу 1
Dim filenameTEMP As String
filenameTEMP = myPath + "\" + Month + "_TEMP.xlsx"

  n = n + 1 / 2: p = 2 * n
  Application.StatusBar = "Выполнено: " & n * 100 & "% " & String(p, ChrW(8700)): DoEvents

Workbooks.Open Filename:=filenameTEMP, UpdateLinks:=False
Workbooks(Month + "_TEMP.xlsx").Worksheets("1").Range("A2:C10").Copy
Gorod.Worksheets("ALL").Range("A2:C10").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Workbooks(Month + "_TEMP.xlsx").Close

'Вставляем таблицу 2
Dim filenameTEMP As String
filenameTEMP = myPath + "\" + Month + "_TEMP.xlsx"

  n = n + 1 / 2: p = 2 * n
  Application.StatusBar = "Выполнено: " & n * 100 & "% " & String(p, ChrW(8700)): DoEvents

Workbooks.Open Filename:=filenameTEMP, UpdateLinks:=False
Workbooks(Month + "_TEMP.xlsx").Worksheets("2").Range("A2:C10").Copy
Gorod.Worksheets("ALL").Range("A12:C20").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Workbooks(Month + "_TEMP.xlsx").Close

Application.ScreenUpdating = True
Application.CutCopyMode = True
Application.DisplayAlerts = True
End Sub

Function GetFolderPath(Optional ByVal title As String = "Выберите папку", Optional ByVal initialPath As String = "P:\ФинДир\ОтделКонсолидации\Бюджет") As String
Dim PS As String: PS = Application.PathSeparator
    With Application.FileDialog(msoFileDialogFolderPicker)
        If Not Right(initialPath, 1) = PS Then initialPath = initialPath & PS
        .ButtonName = "Выбрать": .title = title: .InitialFileName = initialPath
        If .Show <> -1 Then Exit Function
        GetFolderPath = .SelectedItems(1)
        If Not Right(GetFolderPath, 1) = PS Then GetFolderPath = GetFolderPath & PS
    End With
End Function
[/vba]

Автор - Viper25
Дата добавления - 23.12.2016 в 19:11
SLAVICK Дата: Суббота, 24.12.2016, 11:53 | Сообщение № 19
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
еще один блок "'Вставляем таблицу 2", макрос ругается.

так Вы же смотрите на что он ругается, и что пишет.
У Вас дважды в дном макросе повторяется строка:
[vba]
Код
Dim filenameTEMP As String
[/vba]
а это недопустимо.
Удалите одну - и все заработает


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
еще один блок "'Вставляем таблицу 2", макрос ругается.

так Вы же смотрите на что он ругается, и что пишет.
У Вас дважды в дном макросе повторяется строка:
[vba]
Код
Dim filenameTEMP As String
[/vba]
а это недопустимо.
Удалите одну - и все заработает

Автор - SLAVICK
Дата добавления - 24.12.2016 в 11:53
Viper25 Дата: Суббота, 24.12.2016, 19:08 | Сообщение № 20
Группа: Пользователи
Ранг: Участник
Сообщений: 93
Репутация: 4 ±
Замечаний: 20% ±

Excel 2007
Удалите одну - и все заработает

Увы. Что я не так сделал?
Спасибо.
К сообщению приложен файл: 8906270.xlsm (18.3 Kb) · 2284682.xlsx (11.0 Kb)
 
Ответить
Сообщение
Удалите одну - и все заработает

Увы. Что я не так сделал?
Спасибо.

Автор - Viper25
Дата добавления - 24.12.2016 в 19:08
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Создание прогресс-бара выполнения макроса (Макросы/Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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