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 - dynamiczne odwolanie do innych plikow

zoldau 13 Wrz 2011 14:04 7320 5
  • #1 13 Wrz 2011 14:04
    zoldau
    Poziom 2  

    Dzien Dobry
    Zderzylem sie z problemem dynamiczengo przekierowania na pliki wsadowe i nie mam pojecia jak przeskoczyc.

    Cel:
    Mam kilka sklepow do obslugi, ktore generuja listy obrotu i planow obrotu. Chce zrobic formatke, ktora umozliwi mi wczytywanie tylko interesujacych mnie kolumn z ich sprawozdan i dodanie do tego kolumny z planem na nastepny rok .Formatke te chce zapisac pod nazwa sklepu i odeslac jako zadanie do realizacji dla kazdego sklepu oddzielnie. To co mi sie udalo mozna zobaczyc w zalaczniku. Sorry gdy nie wszystko jest jasne jesli chodzi o komendy, mieszkam na terenie niemieckojezycznym, ale mam angielskiego excela i nie znam wszystkich komend w polskim excelu.

    Dodatkowo mam kilka pytan:
    Chce sie zabezpieczyc przed grzebaniem w formulkach i przesylaniem formatki ze wszystkimi pobocznymi plikami z danymi.
    Czy jest mozliwe zrobienie w excelu: zapisz jako, ale zamiast "formul" beda w srodku zapisane wartosci? oszczedzi mi to przechodzenie wielokrotnie przez "copy" i "wstaw jako wartosc".

    0 5
  • #2 13 Wrz 2011 21:24
    marek003
    Poziom 40  

    Jeżeli chodzi o dynamiczną zmianę samego arkusza nie było by problemu ale tobie chodzi o zmianie ścieżki a właściwie nazwy pliku.
    Właściwie nie ma formuły excelowskiej by to uzyskać. ADR.POŚR() sobie z tym nie poradzi. A właściwie innej wbudowanej funkcji nie ma.

    Pozostaje tylko makro lub .... inne "pobranie" danych
    Jeżeli zdecydujesz się na makro to pomyślimy nad rozwiązaniem (nie będzie to takie ciężkie)

    Jeżeli jednak nie chcesz makr proponuje stworzyć w "głównym" pliku parę arkuszy "pomocniczych" w których będzie przy otwieraniu pliku aktualizował/pobierał dane z wszystkich plików. Potem zwykłymi formułami będzie tworzyć twój główny "raport".

    Co do zapisu w excelu samych wartości to się nie da ale Kopiuj - Wklej wartości można można podpiąć pod jakieś makro/przycisk - łącznie z "nazewnictwem" nowo-tworzonego pliku.

    0
  • #3 14 Wrz 2011 08:29
    zoldau
    Poziom 2  

    Dziekuje Marku serdecznie

    Jestem jak widzisz poczatkujacym na tym forum jak rowniez poczatkujacym uzytkownikiem probujacym okielznac excela. Metode z wczytaniem wszystkich danych do odzielnych arkuszy i obracanie nimi zaczalem nawet realizowac, ale... moj zapal polegl po 20tym arkuszu :-) i dlatego wpadelm na pomysl sciagania bezposrednio danych z plikow. Dodatkowym wyzwaniem jest to, ze to ma byc w postaci "rolujacego budzetu", wiec co miesiac musialybm znow zmieniac formuly w n-Arkuszach, zamiast w jednej formatce (no chyba ze istnieje metoda wybierania z formatki jednego arkusza, tylko ze "excelowo" nie potrafie sobie tego wyobrazic). Jak widze jednak w oparciu o wewnetrzne funkcje excela nie jest to mozliwe i niestety tego sie obawialem.
    A co do makr... hm musze sie przyznac, ze.. nie umiem kompletnie programowac, Jestem dosc dobrym uzytkownikiem programow, dobrym testerem (pomocnym dla programistow w wyszukiwaniu nieprzewidzianych sytuacji :-)) ale w programowaniu jestem totalnie lewy. Jesli pisales kiedys makra do podobych zagadnien i moglbys mi je udostepnic do analizy i ew. wlasniej tworczosci bede sie bardzo cieszyl, ale nie chcialbym zabierac Twojego cennego czasu na pisanie czegos dla mnie, gdy ja nie jestem w stanie wniesc w to wlasnego znaczacego wkladu.
    Marku dziekuje Ci bardzo za odpowiedz i... chyba musze zmusic moj zapal do wklepania kolejnych arkuszy :-)
    Milego dnia i pozdrawiam
    Ps. czy istnieje mozliwosc wybierania z jednego arkusza danych z innych poprzez najprostsze przelaczanie? klik "1" mam dane z arkusza1, klik "2" mam dane z arkusza2 itp

    0
  • #4 15 Wrz 2011 09:41
    marek003
    Poziom 40  

    zoldau napisał:
    Ps. czy istnieje mozliwosc wybierania z jednego arkusza danych z innych poprzez najprostsze przelaczanie? klik "1" mam dane z arkusza1, klik "2" mam dane z arkusza2 itp


    Może nie pod przyciskiem (bo konieczne makro) a np pod listą stworzoną za pomocą sprawdzania poprawności można dynamicznie "pobierać" dane z innych arkuszy wykorzystując funkcję adr.pośred() oraz adres().
    Przy czym za pomocą samego adres() w sposób "liczbowy" możesz później dynamicznie zarządzać adresem komórki.
    Zerknij na poniższy przykład.

    Co do rozwiązania poboru danych z innych plików to chwilę później, bo na razie nie mam czasu. (myślę że proste makro [jedno-dwu linijkowe] załatwi sprawę)

    0
  • #5 15 Wrz 2011 13:31
    zoldau
    Poziom 2  

    Czesc Marku

    Przegladalem Twoj przyklad i jestem pod wrazenie, jak w prosty sposob zrobiles przelaczanie. Wczroraj bawilem sie z blokowanie dostepu do arkusza lub poszczegolnych komorek i sadze ze laczac obie te metody (plus ukrywanie arkuszy) uda mi sie na szybko rozwiazac najbardziej palece rzeczy.
    Jeszcze raz Ci dziekuje za czas ktory mi poswieciles.
    Jesli studiujesz to zycze Ci wspanialej pogody na jesienne wedrowki jeszcze przed rozpoczeciem semestru :-)
    Pozdrawiam i milego dnia

    0
  • #6 15 Wrz 2011 13:54
    marek003
    Poziom 40  

    Poniżej "szybki" przykład z niewielkimi makrami dotyczący pobierania danych z pliku o zmiennej nazwie.

    Dodałem tez drugie makro do zapisu danych bez formuł (po zapisie wynikowy arkusz się zamyka (ten niewielki widok przełączania miedzy plikami można wyeliminować).

    Przed wyborem nazwy pliku sprawdź ścieżkę dostępu wpisaną w arkuszu2. Bo bedziesz musiał za każdym razem ją podawać.

    Code:
    Sub pobierz()
    

    sciezka_dostepu = Worksheets("Sheet2").Range("E2").Value
    nazwa_pliku = Worksheets("Sheet1").Range("B2").Value & ".xls"
    nazwa_arkusza = Worksheets("Sheet2").Range("E5").Value

    sciezka = sciezka_dostepu & "[" & nazwa_pliku & "]" & nazwa_arkusza

    ' tu jest pętla wprowadzająca formuły w 10 komórek
    For x = 1 To 10
        Worksheets("Sheet1").Cells(4 + x, 2) = "='" & sciezka & "'!A" & x
    Next x


    End Sub



    Code:
    Sub zapisz_bf()
    

    sciezka_zap = Worksheets("Sheet2").Range("E5").Value
    nazwa_pliku = Worksheets("Sheet1").Range("B2").Value & ".xls"

    Worksheets("Sheet1").Range("B5:C14").Copy

    Workbooks.Add

    Range("A1").PasteSpecial Paste:=xlPasteValues

    ActiveWorkbook.SaveAs Filename:=sciezka & "wynik_" & nazwa_pliku, FileFormat:=xlNormal

    ActiveWindow.Close

    End Sub


    Jak coś wytłumaczyć to pisz.

    0