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

Makro w pliku Personal nie działa na plikach

22 Paź 2019 09:33 312 7
  • Poziom 2  
    Dzień Dobry

    Mam kłopot po skopiowaniu kodu do pliku Personal makro nie działa poprawnie i nie wiem jak to zmienić.
    Zaczynam od otwarcia pliku na którym pracuję i i robię kopie arkusza tam będą kopiowane wartości z tabelą nieciągłą obszar ("A1:Q18").Wszystko działa do momentu otwarcia i skopiowania tabeli z wskazanego pliku niestety dalej makro nie przechodzi do pliku roboczego tylko do arkusza personal z innymi makrami i tutaj na arkuszu wkleja skopiowany obszar. Proszę o pomoc i z góry dziękuję.
    Na skopiowanym arkuszy roboczym mam wówczas dwie tabele z których pobierane są dane do dalszych operacji makra.
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod
  • Poziom 35  
    bodzio-35 napisał:
    makro nie działa poprawnie :cunning: :?:

    Makro być może nie spełnia Twoich oczekiwań :D , ale z reguły działa poprawnie tj. zgodnie z zapisem kodu VBA :please:
    Jeśli uruchamiasz kod z pliku Personal - to dla makra to jest ThisWorkbook i jego arkusze są w stanie Active :!:
    Musisz tak dostosować kod, żeby jednoznacznie wskazać w jakim skoroszycie i w jakich arkuszach - makro ma przeprowadzać określone operacje :idea:
  • Poziom 2  
    Prot napisał:
    bodzio-35 napisał:
    makro nie działa poprawnie :cunning: :?:

    Makro być może nie spełnia Twoich oczekiwań :D , ale z reguły działa poprawnie tj. zgodnie z zapisem kodu VBA :please:
    Jeśli uruchamiasz kod z pliku Personal - to dla makra to jest ThisWorkbook i jego arkusze są w stanie Active :!:
    Musisz tak dostosować kod, żeby jednoznacznie wskazać w jakim skoroszycie i w jakich arkuszach - makro ma przeprowadzać określone operacje :idea:


    Problem w tym że arkusze są zawsze o inne nazwie jak również skoroszyt i tego nie wiem jak rozwiązać jaki będzie kod
  • Poziom 35  
    bodzio-35 napisał:
    arkusze są zawsze o inne nazwie jak również skoroszyt i tego nie wiem

    :cry:
    A makro skąd ma wiedzieć jakie są nazwy arkuszy i skoroszytów, oraz zakresy danych :cunning: :?:
    Wszystko to można wprawdzie obejść (tj. używanie nazw w kodzie), ale zawsze musi w tych obiektach być zachowana jakaś logika i powtarzalność :idea:
    Bez przykładowych plików (źródłowych i wynikowych), bez wskazania struktury tabel w tych plikach, oraz jednoznacznej lokalizacji wszystkich plików - nie ma możliwości modyfikować Twój kod :cry:
  • Poziom 2  
    Prot napisał:
    bodzio-35 napisał:
    arkusze są zawsze o inne nazwie jak również skoroszyt i tego nie wiem

    :cry:
    A makro skąd ma wiedzieć jakie są nazwy arkuszy i skoroszytów, oraz zakresy danych :cunning: :?:
    Wszystko to można wprawdzie obejść (tj. używanie nazw w kodzie), ale zawsze musi w tych obiektach być zachowana jakaś logika i powtarzalność :idea:
    Bez przykładowych plików (źródłowych i wynikowych), bez wskazania struktury tabel w tych plikach, oraz jednoznacznej lokalizacji wszystkich plików - nie ma możliwości modyfikować Twój kod :cry:



    Plik 4.V2D Delta S.xls zawiera działające makro po wskazaniu pliku 4.V2D Delta L.xls.
    Makro chcę przenieść do personal.
    Zawsze otwierany jest plik nazwijmy go bazowy (tutaj 4.V2D Delta s.xls) i potem chcę uruchomić makro ale z Personal.xlsb dotyczące grupy arkuszy.
    Pliki bazowe i wskazywane mają różne nazwy i jedynie dane są w miarę uporządkowane dlatego obszar kopiowany je większy. Kopia w arkuszy jest wykonywana na wszelki wypadek gdyby dane były z formułami a nie wartościami a nie chcę naruszać pliku z danymi.
    Nie wiem czy jasno napisałem jeżeli nie to postaram się dopisać
    Z góry dziękuję
  • Poziom 35  
    Prot napisał:
    zawsze musi w tych obiektach być zachowana jakaś logika i powtarzalność

    bodzio-35 napisał:
    Nie wiem czy jasno napisałem jeżeli nie to postaram się dopisać

    Jakkolwiek nie mogę zrozumieć logiki :cry: Twoich działań na danych zawartych w tych przykładowych plikach (który plik jest plikiem "wynikowym" - podsumowującym, czy agregującym dane z plików źródłowych; po co w plikach źródłowych są 4 ukryte arkusze; czemu służy kopiowanie danych wymiarowych i to w układzie poziomym i pionowym itp :?: :cry: ) to widzę wyraźnie, że bardzo dobrze radzisz sobie z nagrywaniem makr :D
    Chcesz ulokować swoje makro w pliku personal.xlsb, więc musisz w kodzie cały czas panować nad obrabianymi obiektami tzn. w każdym momencie kodu musisz wiedzieć, który plik (Workbook) jest otwarty, który jest zamknięty, a który ukryty :ok: (no tak, plik personal.xlsb jest generalnie cały czas otwarty lecz ukryty :D ).
    Najprostszy sposób rozwiązania takich problemów jest jawne zadeklarowanie w kodzie: pliku wynikowego (czy zbiorczego) i sprawdzenie czy plik ten jest otwarty, folderu z plikami źródłowymi (otwieranych wybiórczo z Application.GetOpenFilename, lub automatycznie wszystkie po kolei wg wskazanego typu) i potem operowanie pełnym zapisem obiektów np
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Nie rozumiem co ? z jakimi plikami ? chcesz przetwarzać, czy wszystkie pliki mają identyczną strukturę ? czy stosowana jest jakaś logika nazw plików i arkuszy ?
    Stąd moje rady są tylko ogólnikowe :cry:
  • Poziom 2  
    Prot napisał:
    Prot napisał:
    zawsze musi w tych obiektach być zachowana jakaś logika i powtarzalność

    bodzio-35 napisał:
    Nie wiem czy jasno napisałem jeżeli nie to postaram się dopisać

    Jakkolwiek nie mogę zrozumieć logiki :cry: Twoich działań na danych zawartych w tych przykładowych plikach (który plik jest plikiem "wynikowym" - podsumowującym, czy agregującym dane z plików źródłowych; po co w plikach źródłowych są 4 ukryte arkusze; czemu służy kopiowanie danych wymiarowych i to w układzie poziomym i pionowym itp :?: :cry: ) to widzę wyraźnie, że bardzo dobrze radzisz sobie z nagrywaniem makr :D
    Chcesz ulokować swoje makro w pliku personal.xlsb, więc musisz w kodzie cały czas panować nad obrabianymi obiektami tzn. w każdym momencie kodu musisz wiedzieć, który plik (Workbook) jest otwarty, który jest zamknięty, a który ukryty :ok: (no tak, plik personal.xlsb jest generalnie cały czas otwarty lecz ukryty :D ).
    Najprostszy sposób rozwiązania takich problemów jest jawne zadeklarowanie w kodzie: pliku wynikowego (czy zbiorczego) i sprawdzenie czy plik ten jest otwarty, folderu z plikami źródłowymi (otwieranych wybiórczo z Application.GetOpenFilename, lub automatycznie wszystkie po kolei wg wskazanego typu) i potem operowanie pełnym zapisem obiektów np
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Nie rozumiem co ? z jakimi plikami ? chcesz przetwarzać, czy wszystkie pliki mają identyczną strukturę ? czy stosowana jest jakaś logika nazw plików i arkuszy ?
    Stąd moje rady są tylko ogólnikowe :cry:


    Rozwiązania najprostsze są najlepsze, porostu zamieniłem kolejność działań, czyli otwieram plik kopiuję dane wskazuje plik do otwarcia i tam się dzieje.

    I wszystko byłoby fajnie gdyby nie fakt że w niektórych arkuszach dane są z formuły i mają po dziesięć miejsc po przecinku a potrzebne są dwa metodą księgową. Excel to =ZAOKR.GÓRA(C4;2) ale jak to dobrze zrobić dla tabeli nie mam pojęcia. pliki powyżej