Wykonywanie wielu śledzonych operacji w języku VBA

Witam

Kiedy aktywuję mój ploter, powinien się on zainicjować (około 30 sekund). W międzyczasie chciałbym tylko wyświetlić formularz użytkownika, który mówi, że musimy poczekać i który usuwa się po zakończeniu inicjalizacji plotera.

Mój problem polega na tym, że:

Jeśli powiem VBA, aby zainicjował ploter, a następnie otworzył formularz użytkownika, formularz użytkownika otworzy się po 30 sekundach.
I odwrotnie, jeśli powiem, że najpierw otwórz formularz użytkownika, reszta kodu zostanie wykonana po zamknięciu formularza użytkownika.

 

Czy masz jakiś pomysł, jak mogę to naprawić lub obejść? Dziękuję.

Dlaczego nie utworzyć 2 makr dla 2 operacji, a następnie utworzyć makro, które wywołuje te 2 makra?

 

Potem jestem quiche w vba ^^

2 polubienia

Witam

Chcesz wstawić pasek ładowania w czasie inicjalizacji?

[edytuj | edytuj kod] Jestem też quiche VBA

1 polubienie

Witam

Dlaczego nie wstawić reszty kodu do formularza użytkownika (klikając go prawym przyciskiem myszy)?

Edit: zobacz tutaj, to jest to, co proponowałem:

http://www.excelabo.net/excel/userform_message

Pokazywanie i ukrywanie formularza użytkownika za pomocą .show i .hide

1 polubienie

Witam

W rzeczywistości uruchamiasz swój formularz użytkownika.

Następnie uruchamiasz ploter (swoją drogą, co to jest?). Po zakończeniu zadania należy zamknąć formularz użytkownika.

 

 

1 polubienie

Oto samouczek dotyczący paska postępu: http://www.blog-excel.com/barre-de-progression-excel/

+1 do Łukasza!

1 polubienie

@Aurelien: W makrach nie zaleca się korzystania z pasków postępu. Rzeczywiście, aby działał poprawnie, wymagałby zarządzania wielowątkowego (zarządzania kilkoma zadaniami jednocześnie). Ponieważ jeśli nie, pasek "zawiesza się" podczas wykonywania makra i dlatego jest bezużyteczny.

2 polubienia

Oto krótkie makro, które ilustruje problem.

 

Po uruchomieniu makra zostanie wyświetlony formularz UserForm1. Gdy go zamkniemy, UserForm2 otworzy się, a raz zamknie jeden po drugim MessageBox.

http://cloud.winlap.ch/download/455

To jest dokładnie ten sam problem, który mam z moim ploterem, na przykład musiałbym otworzyć moje dwa formularze użytkownika w tym samym czasie.

 

Dziękuję

 

Redagować:

Ach, właśnie zobaczyłem wiadomość od .PL, nie wiedziałem, że istnieje metoda "_activate", znałem "_initialize" dla Excela, ale nie działała na SW lub popełniłem błąd. Będę Cię informować na bieżąco, dziękuję!

Edycja 2:

To nie działa. Czy mogę prosić o przetestowanie Twojego rozwiązania na przesłanym przeze mnie makrze? Żeby dowiedzieć się, czy to ja popełniłem błąd. Dziękuję

1 polubienie

Widocznie trzeba zajrzeć z Doevents, żeby zobaczyć: https://support.office.com/fr-fr/article/DoEvents-fonction-7af41eca-88e0-470d-adaf-0b3d4c2575b0

Co eliminuje to, co powiedziałem wcześniej o pasku postępu. ;-)

Ach, myślę, że właśnie znalazłem rozwiązanie!!

 

Dodanie "vbModeless" po "UserForm.Show" wydaje się działać. Aby sprawdzić

PS: Dzięki rem, ale tak naprawdę nie do końca rozumiałem przydatność DoEvents?

Podsumowując, DoEvents pozwala poczekać, aż akcja zostanie całkowicie zakończona przed kontynuowaniem procedury.

Dzięki temu można wstrzymać program w czysty sposób i nie działać w próżni, przeciążając procesor bezużytecznymi obliczeniami do czekania.

Dziękuję za odpowiedź,

ponieważ okno otwiera się dobrze, ale zawartość się nie ładuje (więc białe okno) i okno ładuje się po zakończeniu akcji.

 

Przepraszam teraz i już, jeśli nie będę aktywny w ciągu najbliższych dwóch tygodni (wakacji).