Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

EXCEL VBA - Przypisanie MsgBox w BeforeSave do wielu skoroszytów

turandot 19 Wrz 2013 11:53 2796 13
  • #1 19 Wrz 2013 11:53
    turandot
    Poziom 8  

    Mam 2000 szt skoroszytów stworzonych z szablonu w EXCELU 2002 który miał dodatek (tpwiz) zapisywania w bazie danych i to chodziło OK do czasu zmiany na EXCEL 2010. Przerobiłem to tak aby każdy z nich w przypadku naniesienia jakiejś poprawki dopisywał się do tej bazy (z zdarza się to często).
    Jak kodem VBA przypisać do bieżącego-otwartego skoroszytu do wszystkich 2000szt - poniższy kod (który wyświetli ten komunikat) (dodam że otwarcie po 50szt arkuszy 40 razy to żaden problem):

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0 13
  • Pomocny post
    #2 19 Wrz 2013 15:11
    adamas_nt
    Moderator Programowanie

    Zerknij tutaj.

    0
  • #3 22 Wrz 2013 16:25
    turandot
    Poziom 8  

    Dzięki znalazłem u Pearsona Makro wstawiające Moduł wraz z Makrem do bieżącego Skoroszytu przyda się!
    Ale mnie chodzi o Makro wstawiające do bieżącego Skoroszytu (Zeszytu) Makro we we właściwości: Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    Code:
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    
    ' tu treść makra
    End Sub

    0
  • #4 22 Wrz 2013 17:59
    adamas_nt
    Moderator Programowanie

    Zrozumiałem, że chcesz dopisać procedurę do 2000 plików za jednym kliknięciem.
    Teraz już nic nie rozumiem. Do otwartego, bieżącego skoroszytu wystarczy... wkleić.

    0
  • Pomocny post
    #5 22 Wrz 2013 18:47
    23844
    Użytkownik usunął konto  
  • #6 22 Wrz 2013 19:55
    adamas_nt
    Moderator Programowanie

    Uzupełniając, kilka uwag:
    1. Moduł procedur zdarzeniowych skoroszytu ma różne nazwy w różnych wersjach Excela. Np jeszcze w E2007 jest "ThisWorkbook". Tu przydatna jest procedura (link wyżej) 'VBComponentExists'. Wystarczy przypisać nazwę domyślną i zmieniać w razie czego. Mamy pewność, że nawet w przypadku plików rożnych wersji, wszystko przebiegnie prawidłowo.

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    2. Przed wstawieniem procedury, moim zdaniem, koniecznie należy uruchomić usuwanie. W przeciwnym wypadku, jeśli już istnieje, zostanie dopisana kolejna, o tej samej nazwie. Patrz 'DeleteProcedureFromModule'

    Update: Kobieta serial ogląda, a mi się nudzi. Z tych nudów przećwiczyłem więc powyższe. Czas rzeczywiście nie powala ;) 2000*0,5s=mnóstwo
    EXCEL VBA - Przypisanie MsgBox w BeforeSave do wielu skoroszytów

    0
  • #7 22 Wrz 2013 22:30
    turandot
    Poziom 8  

    To jest moje podziękowanie!!! dla adamas_nt i e-mega.
    Po wgraniu do katalogu nowego katalogu 20 plików makro siedzi tam gdzie powinno być.
    Jutro parę słów o poziomie mojej wiedzy i oczekiwań i o tym jak Wy podeszliście ale już DZIĘKUJĘ

    0
  • Pomocny post
    #8 22 Wrz 2013 23:14
    23844
    Użytkownik usunął konto  
  • #9 22 Wrz 2013 23:16
    adamas_nt
    Moderator Programowanie

    OK, ale zrobiłem drobny błąd. Powinno być

    Kod: vb
    Zaloguj się, aby zobaczyć kod
    "Ktoś" pewnie już go wyłowił ;) Czyli deklaracja zmiennej 'Odp' jest niepotrzebna (załącznik podmieniłem).
    e-mega napisał:
    ~12 minut.
    Nooo, to "tylko" 3 zwrotki "Szła dzieweczka" :)

    0
  • #10 23 Wrz 2013 10:39
    turandot
    Poziom 8  

    Moje braki w wiedzy spowodowały, że myślałem aby otwierać po 40 do 50 skoroszytów i potem makrem podpiętym pod przycisk - klikać, dlatego pisałem o „bieżącym” skoroszycie.
    Oczywiście że Wasze makra to mistrzostwo hulają w pętli – ja niestety tego nie umiem. Ale pokombinuje na nich i mam nadzieję że w końcu załapę.
    Zaraz obrabiam te 2000 i happines.
    Raz jeszcze Dzięki!

    Inny temat z jakim na razie nie mogę sobie poradzić:
    Jak wspomniałem te 2000 skoroszytów były utworzone w dodatku do Excela2002 tmplwiz dodatku formularza i zapisane w skoroszycie BAZA.xls jako rekordy. Formularz tworzył odnośniki w:
    1. Skoroszycie - dopisywał uryty Arkusz(TemplateInformation)
    2. W bazie (w ostatnim polu WT_RECID wartość np: 2082718463)

    Idzie o to aby usunąć ten Arkusz(TemplateInformation) ze wszystkich 2000 skoroszytów, bo podczas otwierania każdego wyświetla się komunikat : Nie można otworzyć kreatora szablonów. (Myślę, że on odpowiada za ten komunikat)
    Niestety nawet ręcznie nie można usunąć (nieaktywna opcja File/Remove Arkusz..)
    EXCEL VBA - Przypisanie MsgBox w BeforeSave do wielu skoroszytów
    Załączam też plik testowy

    0
  • Pomocny post
    #11 23 Wrz 2013 11:12
    adamas_nt
    Moderator Programowanie

    1. Arkusz ma atrybut 'veryhidden' i przed usunięciem trzeba go zmienić.
    2. W pliku jest nazwa do usunięcia.

    Najprościej

    Kod: vb
    Zaloguj się, aby zobaczyć kod
    Oczywiście można wykonać w pętli dla wielu plików, wpleść w procedury opisane wyżej, itp.

    0
  • #12 23 Wrz 2013 12:48
    turandot
    Poziom 8  

    Cytat:
    Oczywiście można wykonać w pętli dla wielu plików, wpleść w procedury opisane wyżej

    Próbuję ale nie ogarniam.

    Mój poziom to:
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    Ten drugi (AutoOpen Stub Data) też się odkrył dlatego go wywołuję.
    Ale oczywiście to makro tylko do obróbki ręcznej - z pętlą nie poradzę.

    0
  • Pomocny post
    #13 23 Wrz 2013 13:19
    adamas_nt
    Moderator Programowanie

    Podstaw do pętli (w pliku 'turandot.xls'), jeśli to te same pliki.

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #14 23 Wrz 2013 15:02
    turandot
    Poziom 8  

    1100 szt plików w 8 minut - oczywiście z poprawionym o usuniecie InfTemplate makrem - rewelacja.
    No i zauważyłeś że samo usunięcie IfoTemplaka nic nie dało dopiero to

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    ostatecznie wywaliło komunikat - super

    Na razie nie zamykam jeszcze tematu bo (jak to ja) szykowałem się do "ręcznej obróbki każdego skoroszytu tzn. wstawienia przycisków w kilku miejscach "dla wygody" użytkownika z przypisanym mu makrem przenoszącym wybrane dane do bazy.
    Tzn. ręcznie to mi idzie jak burza w Personalu makro przycisk na wstążce - 1 klik i przypisane-zapisane-zamknięte.
    Ale ta pętla to jest to...
    One more adamas_nt Thanks

    0