Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2012, 06:14   #1
Blame
Пользователь
 
Регистрация: 24.12.2011
Сообщений: 70
По умолчанию Совместить процессы с высвечиванием формы

Здравствуйте!
Скажите, пожалуйста, а можно сделать так, чтобы пока шла обработка (работали процедуры, функции и т.д.) высвечивалась форма?
Даже вопрос такой. Например, пока обрабатывается 1 лист высвечивается одна форма, как только процесс заканчивается , высвечивается другая форма и процесс обработки при этом идет. Как переключать формы по окончанию обработки листа-понятно, но не понятно,как совместить процесс обработки и высвечивания формы.
Если можно, то примерчик.
Просто у меня получается, что или форма висит, или процесс идет..одно из двух...и смысл формы теряется))))
Peace!
Blame вне форума Ответить с цитированием
Старый 15.01.2012, 12:32   #2
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Думаю это поможет http://www.sql.ru/forum/actualthread...55&hl=#1968357
С уважением, Алексей.

Последний раз редактировалось tae1980; 15.01.2012 в 12:34.
tae1980 вне форума Ответить с цитированием
Старый 15.01.2012, 13:10   #3
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Воспользуйтесь прогресс-баром:
http://excelvba.ru/tools/ProgressIndicator
EducatedFool вне форума Ответить с цитированием
Старый 15.01.2012, 13:38   #4
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Есть ещё стандартный статусбар. Можно выводить положение дел туда
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru
alex77755 вне форума Ответить с цитированием
Старый 15.01.2012, 18:15   #5
Blame
Пользователь
 
Регистрация: 24.12.2011
Сообщений: 70
По умолчанию

Никогда не работала с прогресс-баром.
Для меня это пока сложно.

EducatedFool
Честно говоря,мне очень сложно разобраться в этом примере.
После того, как перетащили модули ProgressIndicator и форму F_Progress

Цитата:
Использовать прогресс бар сравнительно просто - достаточно добавить в макрос несколько строк кода:
необходимо добавить код:

Код:
Sub ПримерИспользованияПрогрессБара()

    КоличествоЗапусковВнешнегоМакроса = 3000

    Dim pi As New ProgressIndicator    ' создаём новый прогресс-бар
   pi.Show "Форматирование ячеек"    ' отбражаем индикатор

    ' первое действие (на шкале индикатора от 0 до 95 процентов) - это окраска ячеек
   pi.StartNewAction 0, 95, "Окраска ячеек", , , КоличествоЗапусковВнешнегоМакроса

    ' цикл с вызовом внешнего макроса "ФорматированиеЯчейки"
   For i = 1 To КоличествоЗапусковВнешнегоМакроса

        ' инициируем очередное действие в индикаторе
       pi.SubAction , "Обрабатывается ячейка $index из $count", "$time"

        ' собственно, код цикла
       ФорматированиеЯчейки i
    Next

    ' всё покрасили - теперь пора чистить ячейки )
   pi.StartNewAction 95, 100, "Очистка ячеек"
    Cells.Clear

    pi.Hide    ' закрываем индикатор
End Sub

Sub ФорматированиеЯчейки(ByVal n As Long)    ' вызываемый макрос
   Cells(n).Interior.ColorIndex = 15: Cells(n).BorderAround xlContinuous
End Sub
По правде говоря, не понятны следующие моменты:
1)
Цитата:
достаточно добавить в макрос
- в какой макрос добавлять ?
2) Здесь Sub ФорматированиеЯчейки(ByVal n As Long)- это основной маркос,который выполняет обработку? Если да,то он у меня процедура идет без указания параметров...
3)
Код:
 ' собственно, код цикла
       ФорматированиеЯчейки i
Код какого цикла необходимо прописывать ?
4) Простите за мою тупость,я понимаю,что это пример, но мне не нужно закрашивать ячейки. Мне нужно ,чтобы индикатор отображал процесс работы моего макроса..


alex77755
можно пример или ссылочку?
Peace!
Blame вне форума Ответить с цитированием
Старый 15.01.2012, 18:20   #6
Blame
Пользователь
 
Регистрация: 24.12.2011
Сообщений: 70
По умолчанию

Честно говоря, мне бы что-нибудь попроще, как например
высвечивание форм с указанием того,какой лист обрабатывается, потому что чувствую, я просто не в состоянии разобраться с прогресс-баром.
Peace!
Blame вне форума Ответить с цитированием
Старый 15.01.2012, 18:40   #7
Blame
Пользователь
 
Регистрация: 24.12.2011
Сообщений: 70
По умолчанию

EducatedFool

После того, как я перетащили модули ProgressIndicator и форму F_Progress отображается форма и идет полоса прогресс бара, но после того,как доходит 100% ,их сменилось уже несколько ,а окончания процесс все нет.
Подскажите,пожалуйста, что мне надо добавить в код ?
Peace!
Blame вне форума Ответить с цитированием
Старый 15.01.2012, 18:54   #8
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
что мне надо добавить в код ?
Вы бы выложили свой файл - давно бы получили готовое решение...
EducatedFool вне форума Ответить с цитированием
Старый 15.01.2012, 19:06   #9
Blame
Пользователь
 
Регистрация: 24.12.2011
Сообщений: 70
По умолчанию

EducatedFool

Спасибо за рекомендацию
Поняля
Пример обработки одного листа приложила в файл
Вложения
Тип файла: zip пример исходных данных.zip (194.3 Кб, 8 просмотров)
Peace!
Blame вне форума Ответить с цитированием
Старый 15.01.2012, 20:35   #10
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Давайте попробуем обойтись без прогресс-бара:

Код:
Sub Кнопка1_Щелчок()
    arr = Range([A2], Range("A" & Rows.Count).End(xlUp)).Resize(, 3).Value
    ReDim NewArr(1 To Rows.Count, 1 To 5)
    For i = LBound(arr) To UBound(arr)
        For Each s In Split(arr(i, 1), ",")
            j = j + 1: sArr = Split(s, "|")
            NewArr(j, 1) = sArr(0): NewArr(j, 2) = sArr(1): NewArr(j, 3) = sArr(2)
            NewArr(j, 4) = arr(i, 2): NewArr(j, 5) = arr(i, 3)
        Next s
    Next i
    Range("d2").Resize(j, 5).Value = NewArr
End Sub
Этот код (поскольку теперь он записывает ячейки не по одной, а весь результат сразу) отрабатывает примерно за секунду,
поэтому можно не городить всякие формы.

Пример в файле: http://excelvba.ru/XL_Files/Sample__...__22-34-55.zip
EducatedFool вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как совместить вставку данных формы с копированием данных самого листа? serikov Microsoft Office Excel 0 11.10.2011 10:20
Совместить 2 запроса stck SQL, базы данных 10 18.05.2011 13:09
совместить 2 макроса Kraimon Microsoft Office Excel 2 13.02.2011 17:16
Совместить с++ и delphi Яр|/||< (^_^) Свободное общение 20 25.03.2010 13:32
Windows XP совместить с 98? Pavluha Windows 3 20.11.2008 15:01