Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/75: Рейтинг темы: голосов - 75, средняя оценка - 4.77
2 / 2 / 0
Регистрация: 21.10.2009
Сообщений: 25

Статус процесса выполнения макроса

21.10.2009, 14:18. Показов 16050. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!

Может конечно такая тема было уже, я не нашел. У меня есть такой вопрос. Подскажите пожалуйста, как можно сделать такую форму, чтобы в процессе выполнения макроса появлялось окно, где бы показывался процесс выполнения? В процентах или в виде закраски полоски. И можно ли вообще? Заранее всем спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.10.2009, 14:18
Ответы с готовыми решениями:

Удаление макроса после выполнения
Всем привет! Нужна помощь в доработке макроса. Имеется файл *.xls с макросом который объединяет несколько книг excel в одну. Этот файл...

Печать во время выполнения макроса
В макросе отправляются два задания на печать. Необходимо чтобы первое задание начало выполняться уже во время выполнения макроса...

Виснет файл после выполнения макроса
Добрый вечер! Проблема следующая: после выполнения макроса по добавлению строк в файл excel - файл начинает ужасно виснуть. То же...

8
0 / 0 / 0
Регистрация: 28.09.2009
Сообщений: 88
21.10.2009, 15:19
Могу предложить такой вариант:
(с использованием класса ProgressIndicator)

http://excelvba.ru/Screenshots... -17-43.JPG



Можно реализовать прогресс-бар, используя строку состояния Excel:

Код очень простой:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub test1()
    For i = 1 To 10000
        p = i \ 100: s = "": For j = 10102 To 10102 + p \ 10: s = s & ChrW(j): Next
        Application.StatusBar = "Выполнено: " & p & "% " & s: DoEvents: DoEvents
    Next
    Application.StatusBar = False
End Sub
 
 
Sub test2()
    For i = 1 To 10000
        p = i \ 100: s = String(p \ 10, ChrW(10152)) & String(10 - p \ 10, ChrW(8700))
        Application.StatusBar = "Выполнено: " & p & "% " & s: DoEvents
    Next
    Application.StatusBar = False
End Sub
См. пример файла:

http://excelvba.ru/Screenshots... -17-09.JPG
0
134 / 79 / 6
Регистрация: 06.04.2009
Сообщений: 192
21.10.2009, 16:34
Я реализовал таким образом:
Есть форма frmStatus с прогрессбаром.
Нужно обработать файл с определённым количеством записей (lCountRow=неск-ко тысяч).

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
nStep = (lCountRow + 100) \ 100 ' Определяем шаг изменения frmStatus.ProgressBar
  frmStatus.Show
  frmStatus.ProgressBar1.Value = 0
  While lCount < lCountRow
    ...    
    nX = nX + 1
    If nX > nStep Then
       nX = 0
       frmStatus.ProgressBar1.Value = frmStatus.ProgressBar1.Value + 1
    End If
  Wend
  frmStatus.Hide
0
2 / 2 / 0
Регистрация: 21.10.2009
Сообщений: 25
22.10.2009, 14:54  [ТС]
1. Спасибо за помощь. Но.. Хм.. Пытался сделать по варианту EducatedFool Test2.. Вроде начинает показывать процесс, но когда заканчивает обработку то показывает 18% всего.. Что в моем коде не так?

Visual Basic
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
Sub Отбор()
 
Dim FIO1 As Worksheet
Dim FIO2 As Worksheet
Dim Svod As Worksheet
 
Dim A, B, SvodCount  As Integer
Dim FIO_Svod  As String
Set Svod = ActiveSheet
'---Установить пути нахождения таблиц-------------------------------------------------------------
Set FIO1 = Workbooks.Open("C:\Documents and Settings\wpi\Мои документы\FIO(n).xls").Worksheets("ФИО")
Set FIO2 = Workbooks.Open("C:\Documents and Settings\wpi\Мои документы\нет_паспорта.xls").Worksheets("ФИО")
 
SvodCount = 1
 
For A = 1 To FIO2.Range("Номер").Rows.Count             'Просмотр столбца номер в таблице FIO2
    FIO2_per = FIO2.Range("Номер").Cells(A, 1)          'Присвоить переменной значение А-той ячейки с номером
                                                        'из таблицы FIO2
    
    For B = 1 To FIO1.Range("Номер").Rows.Count         ' Просмотр столбца номер в таблице FIO1
        FIO1_per = FIO1.Range("Номер").Cells(B, 1)      'Присвоить переменной значение B-той ячейки с номером
                                                        'из таблицы FIO1
                                                        
'------- Сравнить ячеку из табицы FIO2 и ячейки из таблицы FIO1 ------'
          If FIO1_per = FIO2_per Then
          '- В случае если значение ячеек равно, то скорпировать содержимое ячеек A,B,C,D,E А-той строки -'
            Svod.Cells(SvodCount, 1) = FIO1.Range("Номер").Cells(B, 1)
            Svod.Cells(SvodCount, 2) = FIO1.Range("Номер").Cells(B, 2)
            Svod.Cells(SvodCount, 3) = FIO1.Range("Номер").Cells(B, 3)
            Svod.Cells(SvodCount, 4) = FIO1.Range("Номер").Cells(B, 4)
            Svod.Cells(SvodCount, 5) = FIO1.Range("Номер").Cells(B, 5)
            'Увеличить значение счетчика положения
            SvodCount = SvodCount + 1
                       
          End If
     Next B
p = A \ 100
s = String(p \ 10, ChrW(10152)) & String(10 - p \ 10, ChrW(8700))
Application.StatusBar = "Выполнено: " & p & "% " & s: DoEvents
  
Next A
Application.StatusBar = False
End Sub
2. И кстати вопрос в этой же теме задам.. Эта програмка должна сравнивать значения ячеек(Диапазон "Номер") в двух таблицах. Если ячейки одинаковы, то копируются ячейки из первой таблицы в третью. Вопрос - как сделать, чтобы можно было увидеть несовпавшие ячейки?
0
0 / 0 / 0
Регистрация: 28.09.2009
Сообщений: 88
22.10.2009, 15:34
Что в моем коде не так?
Алгоритм
Можно значительно оптимизировать код, причем настолько, что прогресс-бар не понадобится.

Попробуйте что-то вроде этого (не проверял, но должно работать):
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub Отбор()
    Set FIO1 = Workbooks.Open("C:\Documents and Settings\wpi\Мои документы\FIO(n).xls").Worksheets("ФИО")
    Set FIO2 = Workbooks.Open("C:\Documents and Settings\wpi\Мои документы\нет_паспорта.xls").Worksheets("ФИО")
    Dim sh As Worksheet: Set sh = ActiveSheet
    Dim cell As Range: On Error Resume Next
    Application.ScreenUpdating = False
 
    For Each cell In FIO2.Range("Номер").Cells
        sh.Range("a" & sh.Rows.Count).End(xlUp).Offset(1).Resize(, 5).value = _
        FIO1.Range("Номер").Find(cell).Resize(, 5).value
    Next cell
 
    Application.ScreenUpdating = True
End Sub
PS: Проблема была в строке p = A \ 100
В ходе цикла p должно изменяться от 0 до 100
Можно попробовать так:
Visual Basic
1
p = A * 100 \ FIO2.Range("Номер").Rows.Count
0
134 / 79 / 6
Регистрация: 06.04.2009
Сообщений: 192
22.10.2009, 15:45
Вопрос - как сделать, чтобы можно было увидеть несовпавшие ячейки?

Например, выделить их каким-либо цветом, в том же цикле, только по Else:
0
2 / 2 / 0
Регистрация: 21.10.2009
Сообщений: 25
23.10.2009, 10:03  [ТС]
yaser, я в своем коде пытался сделать чтобы сопавшие удалялись. Ни фига.. Часть оставляет почему то.. И количество совпавших другое получается..

EducatedFool, этот код что ли делает то же самое, что и мой что ли?
0
134 / 79 / 6
Регистрация: 06.04.2009
Сообщений: 192
23.10.2009, 13:50
Цитата Сообщение от Dimvlash Посмотреть сообщение
yaser, я в своем коде пытался сделать чтобы сопавшие удалялись. Ни фига.. Часть оставляет почему то.. И количество совпавших другое получается..
А в пошаговом режиме отследить ошибку не получается?
0
2 / 2 / 0
Регистрация: 21.10.2009
Сообщений: 25
26.10.2009, 06:14  [ТС]
yaser, не получается.
EducatedFool, что то не работает ваша оптимизированая программа.. Может там что то под себя еще надо переделать? Пустой лист выдает почему то
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.10.2009, 06:14
Помогаю со студенческими работами здесь

Переименование листов во время выполнения макроса
Добрый день! имеется макрос, внутри которого есть необходимость изменить название листов Например Ив.=Иванов, Пет.=Петров, Сид.=Сидоров...

Прогресс бар выполнения макроса в word
Доброго времени суток! Можно ли как то показать выполнение макроса визуально в ворде?

Проиграть звук после выполнения макроса
Здравствуйте! Возникла нужда в следующем. Хочу чтобы проигрывался звук после выполнения макроса. Не звук из системника, а mp3 или waw...

После выполнения макроса не закрывает книгу
Добрый день, Возникла проблема закрытии книги при использование шедулера. То есть, При отрывание файл пользователем срабатывает...

Развернуть файл после выполнения макроса
Всем добрый день. Хочу сразу сказать, что я полный чайник и только недавно начал изучать что такое макросы и все что с ними связано....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru