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.

Excel- Kopiowanie listy z inego arkusza i jej numerowanie

22 Sty 2013 20:39 2025 8
  • Poziom 23  
    Witam. Mam prośbę o pomoc w poprawieniu poniższego kodu. Kod mam za zadanie skopiować do arkusza listę pracowników z innego pliku. Dodatkowo kod ma ponumerować tą listę (oddzielone dwie linijki kodu). Zrobiłem to tak jak potrafiłem ale lista nie numeruje się tak jak chcę. Pierwsza linijka- czyli Range("A3") = 1 ma dodać cyfrę 1 przy pierwszym nazwisku a druga linijka czyli- Cells(w, 1).Value = Cells(w - 1, 1).Value + 1 ma ponumerować resztę na podstawie pierwszej linijki. Jednak numerowanie następuje o jedno oczko za dużo jak widać na screenie. Zasada numerowania ma być taka: do arkusza kopiuję różne listy z różną ilością pracowników i kod ma ponumerować całą listę począwszy od komórki A3 aż do ostatniego pracownika. Proszę o pomoc w poprawieniu kodu.

    Excel- Kopiowanie listy z inego arkusza i jej numerowanie

    Kod: vb
    Zaloguj się, aby zobaczyć kod
  • Poziom 27  
    Numeruj wiersze przed pobraniem danych, bo tutaj masz po pobraniu i nawet gdy wartość a osiągnie 0, co jest warunkiem zakończenia pętli, następuje wpisanie numeru. Nie wiem czemu ma służyć w pętli każdorazowy wpis wartości 1 w komórce "A3"
  • Poziom 23  
    jest to po to że jak napisałeś liczenie zaczyna się od 0 więc jeśli nie dodam przy pierwszym nazwisku cyfry 1 to ponumeruje mi listę ale pierwsze pole czyli A3 pozostanie puste. Jak to zrobić żeby było poprawnie?
  • Pomocny post
    Poziom 27  
    Pierwsze pobranie powinno nastąpić w pętli
    Numerować powinieneś na podstawie licznika pętli w, jest to bardziej logiczne. Jeśli ustaliłeś w=3 (wiersz 3), to wartość komórki A w tym wierszu powinna być ustawiona z warunkowym wykonaniem jako
    Kod: vb
    Zaloguj się, aby zobaczyć kod
    w momencie pobrania zerowej wartości, nie nastąpi wstawienie wartości licznika
  • Poziom 23  
    Dzięki wielkie. Po wklejeniu poniższego kodu lista numeruje się prawidłowo:

    Kod: vb
    Zaloguj się, aby zobaczyć kod



    Excel- Kopiowanie listy z inego arkusza i jej numerowanie

    Mam jeszcze jedno pytanko związane z tym samym plikiem. Po wklejeniu listy pracowników do arkusza muszę dodać jeszcze w komórkach obok nazwisk pewne symbole (tak jak na screenie). Po wklejeniu listy automatycznie aktywuje się komórka przy pierwszym nazwisku (C3) otwiera się okno UserForm przy pomocy którego do komórki wklejam odpowiednie symbole. Jak zrobić żeby okno to otwierało się samoczynnie w następnej dolnej komórce biorąc pod uwagę że powyższa komórka jest już pełna? Czyli po kliknięciu na "Dodaj" żeby dodało symbol w aktywnej komórce (w przypadku pokazanym na screenie komórka C5) i automatyczne aktywowanie kolejnej dolnej komórki (C6) i ponowne otwarcie okna UserForm? Do przycisku "Dodaj" jest wklejony poniższy kod i myślałem żeby w miejscu ze znakami zapytania dodać odpowiedni kod który by to robił. Proszę o pomoc w rozwiązaniu

    Kod: vb
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    Poziom 27  
    Po pierwsze, nie sprawdzaj czy jest aktywna komórka w kolumnie "C" - jeśli ma być tam aktywna to ją uaktywnij bez sprawdzania, np.
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    natomiast pierwszą wolną komórkę w tej kolumnie wyszukasz przy pomocy funkcji Application.WorksheetFunction.CountA(Columns(3)), o ile kolumna jest ciągłą i nie zawiera przerw, to pierwszym wierszem z wolną komórką będzie o 1 większy niż zwróci to funkcja tzn.
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    jeśli jednak powyżej pierwszego wiersz z danymi w kolumnie "C" są puste komórki, będziesz musiał skorygować o tę ilość (dodać do ilości wierszy zwróconą przez funkcję).
    Pozostanie Ci tylko daną komórkę uaktywnić powyżej wspomnianym poleceniem
    Kod: vb
    Zaloguj się, aby zobaczyć kod
  • Poziom 23  
    Kurcze w żaden sposób nie potrafię zastosować powyższego kodu :( W kodzie jest zawarte słowo "wiersz", co tam muszę wpisać?

    Dodano po 28 [minuty]:

    :D :D :D już znalazłem rozwiązanie. Zamiast znaków zapytania wkleiłem poniższy kod i teraz jest już ok. Ale wcześniej nie pomyślałem o jednej rzeczy, że chciałbym zatrzymać funkcję automatycznego aktywowania okna UserForm jeśli lista pracowników już się skończy. Co dodać do kodu aby zatrzymać ten proces? Czyli jeśli komórka obok w kolumnie B jest już pusta to żeby poniższy kod przestał działać i przestał aktywować okno UserForm?

    Kod: vb
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    Poziom 27  
    Listę, prawdopodobnie, można uznać za skończoną, jeśli ilość elementów z kolumny nazwisk będzie równa liczbie elementów kolumny karty ocen, tak więc przed wywołaniem formy porównaj liczbę niepustych komórek w obydwu kolumnach i jeżeli jest równa pomiń aktywowanie formy
  • Poziom 23  
    Porównanie zrobiłem w ten sposób że w arkuszu mam utworzoną pomocniczą komórkę w której zawarta jest informacja który wiersz został aktywowany. Potrzebne mi to jest do tego żeby w aktywowanym oknie UserForm pokazywało mi pracownika z wiersza z aktywnej komórki. Wykorzystałem to i dałem poniższy kod. Ostatecznie po skończeniu się listy pracowników okno UserForm nie jest już aktywowane.

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Wielkie dzięki za pomoc :D