Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Solved] Coś ala wyszukaj pionowo oraz wstaw VBA excel na dwóch odzielnych plikach Excel

witkowr 08 Jan 2018 14:59 1311 11
  • #1
    witkowr
    Level 7  
    Cześć

    Próbuje od jakiegoś czasu rozgryźć mój problem. i jak na nowicjusza słabo to idzie - trochę poszukałem i próbuje dostosować do swoich potrzeb pomysły innych z podobnym do mojego problemu.
    A wiec: mam dwa pliki - jeden bazowy (u mnie nazwany "baza.xlsx" - znajduje się w innej lokalizacji) oraz drugi Main.xlsx

    Oba plik mają ten sam układ - 20 kolumn. Kolumna A i B są zawsze puste w kolumnie C są dane która powtarza się w obu plikach i właśnie po tej informacji chcę aby było sprawdzane potwierdzenie we wszystkich wierszach (nie mam pojęcia ile przyszłościowo może być w pliku "baza" - z wiekiem pewnie duuużo - potwierdzenie jest tylko w pliku main w 19 kolumnie (S)
    Próbuję zrobić aby stworzone makro w pliku main sprawdzało czy jest już potwierdzenie w pliku baza a jeśli nie to wrzuciło OK z pliku Main. Co do tej pory udało się to to że faktycznie wrzuca OK szukając po kolumnie C ale kasuje poprzednie potwierdzenia OK w pliku baza.
    Może ktoś pomóc i naprowadzić mnie?

    Dzięki

    Poniżej mój kod który jest w pliku main.xlsm
    Code: text
    Log in, to see the code
  • Helpful post
    #2
    Prot
    Level 38  
    witkowr wrote:
    chcę aby było sprawdzane potwierdzenie we wszystkich wierszach


    Chyba nie potrafisz jasno sprecyzować założeń swojego projektu :cry:

    Zamieść na forum konkretne pliki i powiązany z nimi szczegółowy opis co chcesz osiągnąć :?:

    Wybrałeś błędnie funkcję wyszukaj pionowo do przeszukiwania kolumn w której powtarzają się jakieś "potwierdzenia" - to "z definicji" nie może działać :not:
  • #3
    witkowr
    Level 7  
    Dzięki za odpowiedz - może to trochę było chaotyczne :(
    Do rzeczy: Jak poniżej używam dwa pliki - plik baza.xlsx jest dla mnie plikiem bazowym zawierającym wszystkie informacje. Brakuje tylko potwierdzenie czy coś zostało zrobione czy nie. Do tego używam drugiego pliku - Main.xlsm - tu kopiuje informacje z baza te które nie mają potwierdzenia "OK" - plan na dziś - po wykonaniu danej czynności wpisuje w pliku Main potwierdzenie "OK". Na koniec dnia chcę makrem przerzucić wszystkie działania które zostały wykonane (z statusem "OK") do pliku baza gdzie przy tych działąniach musi się pojawić już potwierdzenie "OK". Następnego dnia filtrując po zadaniach bez "OK" wiem co mam robić tego dnia.
    Mam nadzieję że trochę wyjaśniło :)
    W pliku Main są teraz 3 zadania ze potwierdzeniem "OK" a nie są w pliku baza. Chcę aby to zostało wrzucone do pliku baza (te trzy zadania abym wiedział że są już wykonane)

    P.S. do tej pory szukałem po kolumnie "Numer faktu"
  • #4
    witkowr
    Level 7  
    Prot wrote:

    Wybrałeś błędnie funkcję wyszukaj pionowo do przeszukiwania kolumn w której powtarzają się jakieś "potwierdzenia" - to "z definicji" nie może działać :not:


    próbowałem użyć If dla kolumny "S" gdzie mam już wcześniejsze potwierdzenie, czyli wstaw znalezione jeśli jest puste w pliku baza ale to nie zadziałało :(
  • #5
    Prot
    Level 38  
    Z treści Twoich opisów wnoszę, że zależy Ci na skopiowaniu z bazy wybranych rekordów, które mają w kolumnie "potwierdzenie" wpis OK.

    Jeśli nie ma jakiś przeciwwskazań - to proponuję zmienić trochę koncepcję rozwiązywania tego zadania :D : - oba zestawienia umiejscowione są w jednym pliku baza.xlsm ; po jakiejkolwiek zmianie w arkuszu "lista", możesz wykonać (skrót ctrl+s) małe makro, które wyfiltrowuje wszystkie potwierdzone rekordy do arkusza "main".
    Coś ala wyszukaj pionowo oraz wstaw VBA excel na dwóch odzielnych plikach Excelfltzaa..JPG Download (153.56 kB)

    Całość w załączonym pliku.
    baza.zip Download (27.56 kB)Points: 2 for user
  • #6
    witkowr
    Level 7  
    i tu jest problem - muszą być dwa pliki. Plik baza jest plikiem który posiada wszystkie wpisy (z potwierdzeniem OK i bez). Ja do tej pory robiłem filtrowanie w pliku baza które wiersze nie maja potwierdzenia i wrzucałem je do pliku Main aby wiedzieć co mam do zrobienia. Po zakończeniu dnia ręcznie sprawdzałem i przerzucałem potwierdzenia do konkretnych wierszy (zadań) do pliku baza. Jednak to jest bardzo czasochłonne i chciałem to jakoś zautomatyzować - stąd moje próby z VBA (jednak nie do końca mogę wykonać odpowiedni program). :(

    jeszcze taka może cenna informacja - w pliku main maksymalna ilość wierszy to 13 (tyle zadań dniowych założyłem że jestem w stanie wykonać)
  • #7
    Prot
    Level 38  
    witkowr wrote:
    i tu jest problem

    Nie wszystko :cry: można zrealizować przy użyciu filtrowania zaawansowanego :!: (w arkuszu nawet nie możesz przenieść wyniku do innego arkusza :cunning: ) .

    Kod VBA z filtrowaniem zaawansowanym może więcej, ale tylko wtedy kiedy operuje na otwartych plikach :!: proponuje zatem pewien kompromis - wstaw sobie dodatkowy kod, który będzie sprawdzał czy otwarty jest ten plik "main.xlsx" - jeśli tak to tam przeniesie wynik filtrowania, jeśli nie to przeniesie wynik do drugiego arkusza "main" w pliku "baza.xlsm".

    Code: vbscript
    Log in, to see the code
  • #8
    witkowr
    Level 7  
    ok dzięki za odpowiedz - jak tylko będę mógł to sprawdzę zamieszczony przez Ciebie kod.
    Jedno tylko wyjaśnienie - plik main jest otwarty zawsze - właśnie w nim umieszczę makro.
    Plik baza otwierałem przez: Baza = "D:\personal\proba\baza.xlsx"
    Set plik = Workbooks.Open(Filename:=Baza)
    jak pisałem na początku i dalej nie wiem jak pociągnąć temat aby wrzucił to co mam potwierdzony w main do baza (sprawdzałem to po kolumnie C).
  • #9
    Prot
    Level 38  
    witkowr wrote:
    nie wiem jak pociągnąć temat aby wrzucił to co mam potwierdzony w main do baza

    Ale Ty kolego "kręcisz" i kombinujesz :cunning:
    witkowr wrote:
    muszą być dwa pliki. Plik baza jest plikiem który posiada wszystkie wpisy (z potwierdzeniem OK i bez). Ja do tej pory robiłem filtrowanie w pliku baza które wiersze nie maja potwierdzenia i wrzucałem je do pliku Main aby wiedzieć co mam do zrobienia.

    Ok, masz co chciałeś: w pliku baza.xlsx masz całą swą listę operacji - i tylko tu wprowadzasz nowe rekordy :!: (bez względu na status - potwierdzony czy nie).

    Na co dzień korzystasz tylko z pliku main.xlsm - skrótem ctrl+s aktualizujesz sobie każdorazowo arkusz lista. Tam jedynie wprowadzasz zmiany statusu dla poszczególnych operacji (możesz także usuwać uprzednie potwierdzenia) - po każdej zmianie możesz zestawienie "do roboty" zaktualizować. Plik baza.xlsx aktualizuje się automagicznie :D (tj. poprzez formułki w kolumnie S).
    Protma..zip Download (44.02 kB)Points: 3 for user
  • #10
    witkowr
    Level 7  
    suuuper - prawie to co chciałem - wygląda na to że tak naprawdę powstanie drugi plik baza :( szkoda że jeszcze muszę mieć w bliku baza formułę (ja wiem że ale jak ktoś wykasuje przez przypadek albo nie przeciągnie do wiersza w którym już nie będzie ?).

    Czyli mam rozumieć że nie jest możliwe w VBA przekopiować tylko te linijki z baza to main bez potwierdzenia "ok" i na koniec aby w pliku baza pociągnął/przekopiował/wstawił (najlepiej bez dodatkowych formuł) potwierdzenia z main do linijek w baza. aby zostało potwierdzenie w baza na stałe


    wiem że temat nie jest łatwy - chętnie bym sobie odpuścił - ale ...... zaintrygowało mnie :) i będę nadal "kopał" w sieci aż znajdę na to rozwiązanie :)
  • #11
    Prot
    Level 38  
    witkowr wrote:
    Czyli mam rozumieć że nie jest możliwe w VBA przekopiować tylko te linijki z baza to main bez potwierdzenia "ok"

    Ależ skąd taki wniosek ? :D Możliwe jest prawie wszystko - ale w którymś momencie Excel Ci zgłosi, że kod jest za długi, albo że zabrakło pamięci do przetwarzania kodu :lol:
    Na poważnie to ja wybieram w swoich projektach optymalne połączenie rozwiązań arkuszowych i kodu VBA :spoko: Po co dłubać w kodzie :?: dla uzyskania efektu, który daje prosta formuła łącza :?:
  • #12
    witkowr
    Level 7  
    Problem nie rozwiązany :(

    Brak pomysły jak zrobić na dwóch oddzielnych plikach bez generowania "nowej" bazy jak w propozycjach kolegów miało miejsce.

    Ale dzięki za próbę :)