Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Solved] VBS uruchamiający excela i wykonujący makro VBA

vipczesio 01 Jun 2021 15:14 786 20
  • #1
    vipczesio
    Level 9  
    Hej,
    mam w pliku a.xlsm zapisane makro którego wykonanie powoduje zapisanie kopi tego pliku w innym folderze pod nazwą b.xlsm.
    Obecnie działam tak że otwieram plik a.xlsm muszę odczekać około 10-15 s aż plik automatycznie pobierze kwerendą świeże dane z SQL-a następnie ręcznie uruchamiam makro o nazwie Makro1.
    Po wykonaniu makra plik a.xlsm zamyka się automatycznie a pojawia się otworzony plik b.xlsm w którym muszę jeszcze ręcznie włączyć udostępnianie.
    Przy włączaniu udostępniania mam dwa okna dialogowe
    1.
    VBS uruchamiający excela i wykonujący makro VBA
    2.
    VBS uruchamiający excela i wykonujący makro VBA

    Tak dzień w dzień ;-)

    Chciałbym zastosować VBS aby to maksymalnie automatyzować, a więc w pierwszym kroku, zastosować skrypt aby ten otworzył plik a.xlsm odczekał 10-15 s aż plik się odświeży zamknął go zapisując i dopiero wykonał Makro1. ( nie wchodzi w grę VBS na zasadzie skopiuj a do folderu i zmień nazwę na b bo makro robi jeszcze kilka innych rzeczy).
    W drugim kroku byłoby super jeśli w jakiś sposób dało by się zrobić tak aby pliku b.xlsm nie trzeba było ręcznie uruchamiać aby włączyć w nim udostępnianie. Niestety nie udało mi się od razu z poziomu Makro1 zrobić tak aby plik zapisany b.xlsm było od razu udostępniony.



    Znalazłem skrypt który powoduje wykonanie mojego makra ale niestety bez otworzenia pliku a.xlsm a tym samym bez odświeżenia w nim danych.
    Chciałbym Was bardzo prosić o przerobienie poniższego skryptu VBS aby ten wykonał powyższe dwa kroki w miarę możliwości bez mojego udziału poza uruchomieniem VBS.

    Kod VBS który teraz powoduje tylko wykonanie Makro1:
    Code: vbnet
    Log in, to see the code


    Oraz Makro1 może da się przerobić aby plik zapisywany jako b.xlsm był od razu udostępniony.

    Code: vbnet
    Log in, to see the code
    [28-30.06.2022, targi] PowerUP EXPO 2022 - zasilanie w elektronice. Zarejestruj się za darmo
  • Helpful post
    #2
    clubs
    Level 37  
    vipczesio wrote:
    Set xlBook = xlApp.Workbooks.Open("N:\a.xlsm", 0, True)

    Zero zmień na 3
    Zobacz
    Code: vbscript
    Log in, to see the code


    ps
    pomijam ten błąd w twoim zapisie
  • #3
    vipczesio
    Level 9  
    Fakt trochę źle skróciłem ścieżkę zapisu. Ale po poprawieniu i dodaniu AccessMode:=xlShared wywala błąd przy wykonywaniu makra.
    Chyba ten parametr AccessMode:=xlShared gryzie się z tym że zapisywany plik ma w sobie makro.

    VBS uruchamiający excela i wykonujący makro VBA
  • #4
    clubs
    Level 37  
    Nie zapiszesz ze znakami specialnymi jak :\
  • #5
    vipczesio
    Level 9  
    To nie znak specjalny tylko wskazanie miejsca zapisu pliku b.xlsm
    N:\ to poprostu dysk N
  • #6
    clubs
    Level 37  
    Przesuń te zapisywanie i udostępnianie na sam koniec
    Code: vbscript
    Log in, to see the code
  • #7
    vipczesio
    Level 9  
    Po przerzuceniu niżej też nie idzie zatrzymuje się wcześniej:

    VBS uruchamiający excela i wykonujący makro VBA
  • #8
    clubs
    Level 37  
    vipczesio wrote:
    Po przerzuceniu niżej też nie idzie zatrzymuje się wcześniej:

    Coś masz nie tak bo widzisz, że sypie błędami masz taki obiekt 'tabela.."?
    Najlepiej załącz plik.
    aha
    vipczesio wrote:
    Niestety zmiana 0 na 3 nic nie zmienia.
    nie trzeba więc chyba wymuszać jeszcze tego dodatkowo parametrem 3.

    3 odpowiada za aktualizacje zewnętrznych łączy.
    ale jak chcesz mieć widoczny skoroszyt to dodaj po
    Code: vbscript
    Log in, to see the code
  • #9
    vipczesio
    Level 9  
    Dzieki za podpowiedź z :
    Set xlApp = CreateObject("Excel.Application")
    xlApp.visible = true

    Faktycznie teraz odpalenie skryptu VBS uruchamia plik a.xlsm, jednak od razu po odpaleniu wykonuje się makro bez odświeżenia kwerendy, zapisuje po prostu plik w nowym miejscu pod nową nazwą ale z starymi danymi. Oczywiście 0 w VBS jest zamienione na 3.
    Odpalenie ręcznie pliku a.xlsm powoduje że od razu po odpaleniu, plik łączy się z Tabela_Kwerenda_z_INFOCENTER11 - z bazą danych w SQL aby pobrać świeże dane do jednego z arkuszy pliku a.xlsm a dokładnie do arkusza "raport_butle_polityki".
    Wygląda to tak jak na załączonym obrazku.

    VBS uruchamiający excela i wykonujący makro VBA

    Próbowałem też do makra w różnych miejscach dodać:
    ActiveWorkbook.Connections("Kwerenda z INFOCENTER11").Refresh
    aby wymusić ponowne odświeżenie kwerendy, oraz:
    Application.Wait Now + TimeValue("0:00:10")
    aby dać czas plikowi na pobranie tych danych z reguły trwa to około 5 s.

    Niestety nie jestem w stanie załączyć pliku jest on dość rozbudowany i "ciężki" oraz poza moim środowiskiem pracy i tak się nie będzie łączył i odświeżał.
    Przychodzi mi tylko jeszcze jedno do głowy czy da się w VBS opóźnić instrukcję wykonania makra?
    Aby od razu po uruchomieniu pliku a.xlsm nie przechodził do uruchomienia makra tylko właśnie poczekał 5-10 s w tym czasie plik sam się odświeży bo włączone odświeżanie podczas uruchamiania, następnie wykona się makro i powinno być ok.
    A może jakoś zapętlić VBS aby w 1 VBS tylko uruchomił plik a.xlsm a kończąc działanie uruchomił 2 VBS który już w otworzonym pliku wykonał by makro.
  • #10
    clubs
    Level 37  
    vipczesio wrote:
    Przychodzi mi tylko jeszcze jedno do głowy czy da się w VBS opóźnić instrukcję wykonania makra?

    vipczesio wrote:
    Set xlBook = xlApp.Workbooks.Open("N:\a.xlsm", 0, True) 'Lokalizacja pliku EXcel

    dodaj po (1000 = 1s)
    WScript.Sleep 15000
  • #11
    vipczesio
    Level 9  
    No nie mam już głowy.
    Powyższe oczywiście działa skrypt odpala plik i czeka 15s zanim uruchomi makro.
    Niestety nie wiem dlaczego plik uruchomiony w ten sposób przez skrypt nie chce się aktualizować, nie łączy się z bazą a ten sam plik uruchomiony kilka chwil później ręcznie robi to bez problemu.
  • #12
    clubs
    Level 37  
    vipczesio wrote:
    No nie mam już głowy.
    Powyższe oczywiście działa skrypt odpala plik i czeka 15s zanim uruchomi makro.
    Niestety nie wiem dlaczego plik uruchomiony w ten sposób przez skrypt nie chce się aktualizować, nie łączy się z bazą a ten sam plik uruchomiony kilka chwil później ręcznie robi to bez problemu.

    Usuń te 'true' bo wtedy masz plik tylko do odczytu.
    Code: vbscript
    Log in, to see the code
  • #13
    vipczesio
    Level 9  
    Niestety bez zmian, nie odświeża.

    Chyba ostatnia sprawa gdy VBS uruchamia plik odpala się on tak jakby w inny sposób okno uruchamiania wygląda tak:
    VBS uruchamiający excela i wykonujący makro VBA

    Natomiast gdy ręcznie uruchamiam ten plik okno ładowania pliku wygląda tak:
    VBS uruchamiający excela i wykonujący makro VBA

    Nie wiem czy ma to jakiekolwiek znaczenie ale to ostatnia rzecz jaka przychodzi mi na myśl.
  • #14
    clubs
    Level 37  
    vipczesio wrote:
    Niestety bez zmian, nie odświeża.

    Zobacz jeszcze tak
    Code: vbscript
    Log in, to see the code
  • #15
    vipczesio
    Level 9  
    Jedyna widoczna różnica jest taka że plik a.xlsm uruchamia się teraz przez skrypt w sekundę :-) wcześniej jakieś 6-7 s.
    Niestety po otworzeniu nie odświeża się.

    Moderated By dt1:

    Nie ma potrzeby cytowania całej poprzedniej wypowiedzi. Każdy może ją odczytać sam. Posty Kolegi zostały poprawione (zbędne cytowanie usunięto). Do odpowiadania proszę używać opcji odpowiedz, a nie cytuj.

  • #16
    clubs
    Level 37  
    vipczesio wrote:
    Jedyna widoczna różnica jest taka że plik a.xlsm uruchamia się teraz przez skrypt w sekundę :-) wcześniej jakieś 6-7 s

    On się uruchamia tyle samo tylko ty go później widzisz.
    To jeżeli plik uruchamia się tyle sekund to trzeba wydłużyć czas przed uruchomieniem makra, czyli daj 'sleep' na 30s.
  • #17
    vipczesio
    Level 9  
    Dziękuję bardzo, za dobre chęci ale mimo tych wszystkich dobrych pomysłów i prób nadal plik się nie łączy i nie odświeża :-(
  • #18
    vipczesio
    Level 9  
    Bez zmian, skrypt odpala plik, odczekuje określoną ilość czasu ale w tym czasie plik się nie odświeża.
  • Helpful post
    #19
    clubs
    Level 37  
    Code: vbscript
    Log in, to see the code
  • #20
    vipczesio
    Level 9  
    W zasadzie 2 problemy rozwiązał clubs.
    1 - otworzenie pliku excela i wymuszenie jego odświeżenia i pobranie danych z zewnętrznych źródeł przed uruchomieniem Makra, dzięki temu kodowi:
    Code: vbscript
    Log in, to see the code


    2 - zapisanie w makrze aby po zapisaniu nowego pliku ten był od razu udostępniony dzięki temu kodowi:
    Code: vbscript
    Log in, to see the code


    Raz jeszcze dziękuję clubs za poświęcony czas i pomoc.
    Oby więcej tak pomocnych ludzi na forum.
  • #21
    vipczesio
    Level 9  
    W zasadzie 2 problemy rozwiązał clubs.
    1 - otworzenie pliku excela i wymuszenie jego odświeżenia i pobranie danych z zewnętrznych źródeł przed uruchomieniem Makra, dzięki temu kodowi:
    Code: vbscript
    Log in, to see the code


    2 - zapisanie w makrze aby po zapisaniu nowego pliku ten był od razu udostępniony dzięki temu kodowi:
    Code: vbscript
    Log in, to see the code


    Raz jeszcze dziękuję clubs za poświęcony czas i pomoc.
    Oby więcej tak pomocnych ludzi na forum.

    Dodano po 4 [godziny] 8 [minuty]:

    J.w