Ponowne uruchamianie Excel podczas zamykania aplikacji makrem - pobieranie danych zewnętrznych

Anonimowe
2022-08-23T09:05:09+00:00

Dzień dobry

Proszę o pomoc z poniższym błędem. Windows 10 Pro, Microsoft Office 365

Zbudowałem aplikację Excel VBA opartą na formularzach. Aplikacja składa się z samego pliku aplikacji (xlsm) oraz drugiego pliku, z którym aplikacja jest połączona jako zewnętrzne źródło danych (xlsx) (utworzone połączenie DANE>POBIERZ DANE ZEWNĘTRZNE). Plik xlsx jest zapisany na dysku. Utworzonych jest 7 zapytań; nie są dużych rozmiarów ponieważ największe zapytanie posiada 270 wierszy, kolumn do 20 szt

Podczas logowania do aplikacji, połączenia są odświeżane poprzez zawarty kodzie "ActiveWorkbook.RefreshAll". Użytkownik na możliwość też ręcznego odświeżania poprzez przycisk (tu też zastosowany "ActiveWorkbook.RefreshAll"). Aplikację zamykamy poprzez przycisk (kod: ActiveWorkbook.Close savechanges:=True").

PROBLEM:

Przy scenariuszu 1: Logowania do aplikacji (jednorazowe odświeżenie) i zamknięciu jej, problem nie występuje.

Przy scenariuszu 2

  1. Logowanie (1 odświeżanie)
  2. Ręczne 2 odświeżanie
  3. Zamknięcie aplikacji

Excel chwilowo zawiesza się, wyłącza się i uruchamia ponownie. Problem jest większy gdy przy zamykaniu aplikacji, są włączone inne pliki excel, które również się wyłączają. Po automatycznym uruchomieniu excela po tym wystąpieniu, włącza się odzyskiwanie poprzednich plików ale często nie są zachowane w oczekiwanym stanie zapisu (brakuje danych).

SPOSTRZERZENIA

Obserwując "menedżer zadań>procesy", podczas pierwszego odświeżania danych, tworzone jest 7 podprocesów (3 Microsoft.Mashup.Container.Loader, 3 Host okna konsoli, 1 Excel). Po wykonaniu drugiego odświeżania zachowanie jest bardzo różne; czasem cały proces Excel potrafi zniknąć i po jakimś czasie się pojawić. Przy ręcznym, drugim odświeżaniu (w samym excel, nie wywołane kodem) dzieje się tak samo.

W trakcie zamykania aplikacji, za każdym razem w menedżer zadań tworzy się podproces Excel "Raportowanie błędów systemu"

Bardzo proszę o pomoc. Wykorzystałem chyba wszystkie możliwe kombinacje i po stronie kodu, i edycji zapytań. Edytowałem również ustawienia znalezione na tym forum i i na innych (ustawienia DDE, przyspieszanie grafiki, ustawienia ładowania danych).

Microsoft 365 i pakiet Office | Excel | Do użytku biznesowego | Windows

Pytanie zablokowane. To pytanie zostało zmigrowane ze społeczności pomocy technicznej firmy Microsoft. Możesz zagłosować, czy pytanie jest pomocne, ale nie możesz dodawać komentarzy ani odpowiedzi, ani też śledzić pytania.

Komentarze: 0 Brak komentarzy

Odpowiedzi: 7

Sortuj według: Najbardziej pomocne
  1. Oskar Shon 49,336 Punkty reputacji Moderator wolontariuszy
    2022-08-23T11:54:21+00:00

    Ponowne otwieranie Excela, to po prostu wysypanie się pliku ze skutkiem próby odzyskania.

    Na etapie samego opisu nie mogę nic więcej powiedzieć, bo przyczyn może być wiele, choć podejrzewać tutaj można kod jaki działa na tym pliku.

    Sa przypadki kiedy puszczony krokowo chodzi prawidłowo, a bez zatrzymywania dzieją się cheche, ale to bardzo rzadkie przypadki i z pewnością do uniknięcia:

    Polecam bym nie tracić czasu tylko napisać plik od nowa, bez przenoszenia obiektów pomiędzy felernym a nowym. W tedy skopiowanie treści procedur i sprawdzenie czy działają prawidłowo.

    Pozdrawiam.

    Czy ta odpowiedź była pomocna?

    Komentarze: 0 Brak komentarzy
  2. Anonimowe
    2022-08-23T10:42:51+00:00

    Chyba nie wyraziłem się dość precyzyjnie.

    Przy próbie użycia kodu krokowo [F8 (Step Into)] który zamyka aplikację błąd VBA nie występuje. Pisząc "problem występuje", chodziło mi o ponowne otwieranie Excela

    Czy ta odpowiedź była pomocna?

    Komentarze: 0 Brak komentarzy
  3. Oskar Shon 49,336 Punkty reputacji Moderator wolontariuszy
    2022-08-23T10:28:22+00:00

    Na której linijce?, pokaż zrzut ekranu i komunikat, może mi się coś skojarzy.

    Pozdrawiam.

    Czy ta odpowiedź była pomocna?

    Komentarze: 0 Brak komentarzy
  4. Anonimowe
    2022-08-23T10:20:13+00:00

    Kompilacja wykonywana jest zawsze przed przekazaniem użytkownikom (MenuVBA>Debug>Compile VBAProject). W tym przypadku próba kompilacji nie wykazuje błędów i opcja w menu Debug jest wyszarzona.

    "Dziwne tylko ze piszesz o takim zdarzeniu jaki następuje w kroku 2 gdzie raczej dajesz nacisk na to iż operacje realizowane są ręcznie." - ręcznie w rozumieniu wciśnięcia odświeżania danych przycisku przez użytkownika, na formularzu (uruchomienie odświeżania poprzez kod).

    Deklarację są włączone w projekcie i zawsze deklaruję zmienne - taki zachowuję standard podczas tworzenia projektów. Co do wielkości zmiennych i typów deklaracji zmiennych, to zawsze VBA wyrzuca błąd jeśli taki zostanie popełniony (np. run time error 13, type mismatch) - tu takowych nie ma. Poza tym kompilator powinien to wychwycić.

    Przy próbie użycia kodu krokowo [F8 (Step Into)] problem również występuje.

    Pozdrawiam

    Czy ta odpowiedź była pomocna?

    Komentarze: 0 Brak komentarzy
  5. Oskar Shon 49,336 Punkty reputacji Moderator wolontariuszy
    2022-08-23T09:11:53+00:00

    Excel chwilowo zawiesza się, wyłącza się i uruchamia ponownie.

    To typowy objaw błędu w kodzie. Interpreter go nie rozpoznaje (nie wykonano próby kompilacji z menu VBA) zatem przy jego realizacji dochodzi do błędu i program się wysypuje. Dziwne tylko ze piszesz o takim zdarzeniu jaki następuje w kroku 2 gdzie raczej dajesz nacisk na to iż operacje realizowane są ręcznie.

    Ja bym zbytnio nie roztrząsał tego bo na etapie opisu to tylko przypuszczenia, ale zbudował plik od nowa, potem dokładnie sprawdził kod dodając instrukcje wymuszenia deklaracji zmiennych, potem skompilował sprawdzając czy wszystkie instrukcje są dobrze napisane, a wielkość zmiennych odpowiada rozmiarowi spodziewanych danych.

    Pozdrawiam.

    Czy ta odpowiedź była pomocna?

    Komentarze: 0 Brak komentarzy