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.

Kopiowanie wartości komórek do kolejnego zeszytu.

24 Maj 2013 15:38 1908 6
  • Poziom 11  
    Cześć,

    mam problem z przyciskami, w których umieściłem makro, które kopiuje wartości z komórek C6:C45 w zeszycie Sheet1 do zeszytu PASS (A3:AN3).

    Jak wciskam przycisk "Pass" wartości są kopiowane do zeszytu pass, ale jakoś dziwnie bo nie w jednym wierszu tak jak bym chciał tylko łapie kilka wierszy??

    Drugi problem jest taki, że nie wiem jak to zrobić, aby po wciśnięciu przycisku Pass dane zapisywały się jeden pod drugim. Czyli chodzi mi o to, aby się nie nadpisywały dane skopiowane do zeszytu pass.

    Trzeci i ostatni problem dotyczy guzika "take back", nie wiem jak to zrobić, aby usuwał zawsze ostatni wpis w zeszycie Pass.

    Czy jest to możliwe w Excelu?

    Plik testowy w załączniku.

    Dziękuję za pomoc!

    Pozdrawiam,

    Laik 2013
  • Poziom 38  
    Procedury jak widzę zapisywane przez rejestratora makr... Wejdź do edytora VBA i uporządkuj to, wyrzuć niepotrzebne rzeczy. Np. pierwszy problem:
    Range("C6:H45").Select
    Jeśli chcesz, żeby kopiowało C6:C45, to trzeba to zmodyfikować
  • Moderator Programowanie
    Zdaje się, że lepszym rozwiązaniem byłoby przepisywanie w pętli... Najpierw oczywiście wyszukanie pierwszego wolnego wiersza w arkuszu "PASS".
  • Pomocny post
    Poziom 31  
    Kopiowanie komórek:
    Kod: vb
    Zaloguj się, aby zobaczyć kod


    A tu kasowanie ostatniej linii:
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    Kod trzeba trochę poprawić, ale to już zadanie dla Ciebie ;)
    Załączniki:
  • Poziom 26  
    markoz7874 napisał:
    Kopiowanie komórek:....

    Nie ma najmniejszego powodu stosowania w procedurach które dotyczą kopiowania czy też czyszczenia zakresów, metody Select. Mimo, iż procedury są w miarę poprawne, można z dużym prawdopodobieństwem powiedzieć, że używanie Select, znacznie je spowalnia. to samo dotyczy wyznaczania ostatniego wiersza zawierającego wartość za pomocą pętli. Dla tego celu istnieje przecież w VBA stała xlCellTypeLastCell w metodzie Range.SpecialCells - nie użyłem jej, bo w przykładzie sie akurat nie nadaje.
    Wklejam obydwie Twoje procedury z moimi zmianami. Można by zrobić toto bardziej eleganckie poprzez deklaracje zmiennych, czy też nie mieszanie sposobu adresowania zakresów, ale wydaje mi się, że w tej postaci może zostać opublikowane na tym forum ;)
    Tak to widzę:
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    A tu kasowanie ostatniej linii:
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    Pozdrawiam
  • Poziom 31  
    101pawel napisał:

    Nie ma najmniejszego powodu stosowania w procedurach które dotyczą kopiowania czy też czyszczenia zakresów, metody Select. Mimo, iż procedury są w miarę poprawne, można z dużym prawdopodobieństwem powiedzieć, że używanie Select, znacznie je spowalnia. ..

    Witam
    Serdecznie dziękuję za udzielone rady - są bardzo cenne.
    Jak pewnie zauważyłeś nie skupiałem się specjalnie na poprawności programowania.
    Kod powstał poprzez rejestrację makra i drobną edycję aby nie zagłębiając się w szczegóły szybko pomóc koledze.
    Używanie metody Select i inne niedociągnięcia miały następujące przyczyny:
    1. Tak zarejestrował excel ;)
    2. Pozostawiony w tej formie kod, mimo większej długości jest łatwiejszy do prześledzenia gdyby zakładający watek miał taką ochotę.
    3. Prędkość działania nie była priorytetem
    4. Piszący kod nie jest programistą i nawet gdyby się postarał, dużo lepiej by kodu nie napisał.;)
    Pisząc szczerze - ostatni punkt ma chyba największą wagę w podanych przeze mnie powodach :)
    Mimo wszystko krytykę uznaję za bardzo cenną, konstruktywną i polecam się na przyszłość. Uczyć się trzeba od najlepszych
    serdecznie pozdrawiam :)
  • Poziom 26  
    markoz7874 napisał:
    Mimo wszystko krytykę uznaję ...

    Eno, spoko; przecież sednem mojego posta nie jest krytyka, przedstawiłem tylko inny punkt widzenia ;)
    Pozdrawiam