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

Excel - przepisanie wartości z jednej kolumny do drugiej tylko pierwszy raz

Facetjanusz 15 Jun 2012 19:52 5371 21
  • #1
    Facetjanusz
    Level 15  
    Mam jeszcze prośbę do adamsa, mianowicie mam taką sytuację:
    kiedy wprowadzam dane pierwszy raz w kolumny B C D E F (na początku są jeszcze puste) powinny wartości z kolumny D zostać przepisane do kolumny I i nie ulec zmianie w wypadku kiedy w ciągu roku następuje zmiana ilości osób. Wartość po zmianie zostaje wpisana w kolumnę J i jednocześnie w kolumnę D . Chodzi o to aby już nie nastąpiła zmiana w kolumnie I i wartość ta pozostała do końca roku, aby została przeliczana wartość średnia niezbędna do obliczeń opłat, które zależą od zmian dokonywanych w czasie trwania roku, (wszystko ta działa mi dobrze).
    Obecnie działa mi to ale przepisuje kolumny D do I dopiero po pierwszej zmianie ilości osób.

    Pozdrawiam
  • #2
    adamas_nt
    Moderator of Programming
    Po mojemu wystarczy sprawdzić komórkę w kolumnie I, jeśli pusta (pierwszy wpis) to... Np taką procedurą zdarzeniową
    Code: vbscript
    Log in, to see the code
  • #3
    Facetjanusz
    Level 15  
    Dzięki, wszystko do tej pory działa dobrze - z tym że proszę jeszcze o pomoc w następującej sprawie. Kiedy wykonuję Wyczyść zawartość dobrze czyści 1 komórkę -przy większej ilości leci błąd. A druga sprawa to jeżeli daję Zmiana funduszy to powinno ustawić zmienną wiersz[/b ] na 24 i wpisywać dane w tabeli [b]Zmiana wielkości funduszy.
    Pozdrawiam
  • #4
    adamas_nt
    Moderator of Programming
    Facetjanusz wrote:
    przy większej ilości leci błąd.
    Ogranicz do jednej. Np
    Code: vbscript
    Log in, to see the code

    Facetjanusz wrote:
    jeżeli daję Zmiana funduszy to powinno ustawić zmienną wiersz na 24
    Przypisanie masz w kodzie przycisku 'OK' (indeks plus liczba w linii: 'wiersz = ComboBox2.ListIndex + 8'). Zadeklaruj zmienną publiczną typu integer i w kodzie przycisków nadawaj wartość (8 lub 25 zdaje się). Następnie podstaw w w/w linii.
  • #5
    Facetjanusz
    Level 15  
    Dzięki adams - czyszczenie działa , ale musiałem do Twojej poprawki dodać End If . Natomiast zadeklarowałem zmienną jak proponujesz, ale nie udaje mi się wybrać tych liczb (nie wiem gdzie). Jeśli możesz to napisz konkretnie jak to widzisz.
    Pozdrawiam
  • #7
    Facetjanusz
    Level 15  
    Super - i o to mi chodziło.. - nawet mi dopisałeś komunikat z drugiej opcji.
    Będę tą część programu wraz z makro instalował w zasadniczym programie. Jak to mi się uda to go zademonstruję w całości na forum - może komuś (prowadzącym Wspólnotę Mieszkaniową) przyda się. Ten program mi działa świetnie już 2 lata - ale ja lubię usprawniać. Jeszcze raz dzięki Ci bardzo za pomoc.
    Pozdrawiam Janusz.
  • #8
    Facetjanusz
    Level 15  
    Witam
    Prosiłbym o podpowiedź jaki jest kod w makro rejestrujący takie zdarzenie jak wpis litery w komórkę. Chodzi o to aby w moim przykładzie, wpisując w komórki w kolumnie F pierwszą literę W wpisało Własność , a pisząc K dopisało Komunalne.
    Dzięki. Pozdrawiam.
  • Helpful post
    #9
    marek003
    Level 40  
    Że tak się wtrącę ...
    Nie uczysz się :)

    Spróbuj załapać o co chodzi w kodzie (przeczytać go) a sam zaczniesz pisać kody uzależnione od zmian w arkuszu.


    Code: vbscript
    Log in, to see the code


    UCase zamienia tekst (w tym przypadku wpisywaną literę) na wielkie litery. To takie zabezpieczenie przed wpisaniem "w" lub "W".
    Resztę kodu powinieneś rozumieć z poprzednich podpowiedzi kolegi adamasa. :)


    dodane:
    ------------------------
    A dla przykładu przeczytam ci kod:
    If Target.Column = 6 And UCase(Target.Value) = "K" Then Target.Value = "Komunalne"

    "Słowniczek":
    (Column - kolumna, Value - wartość, UCase - jak wyżej, Target - w tym przypadku dotyczy zmienianej komórki)

    I czytamy (oczywiście pomiń tekst w nawiasach):

    (if) jeżeli (Target.Column = 6) zmiana dotyczy kolumny nr 6 czyli F (AND) oraz (UCase(Target.Value) = "K") zmieniana wartość zmieniona na duże litery równa jest K (Then) wtedy (Target.Value = "Komunalne") zmienianej wartości przypisz ciąg Komunalne.
  • #10
    Facetjanusz
    Level 15  
    Dzięki Ci marku za podpowiedź. Oczywiście pamiętam żeby się uczyć -i trochę działam w tym kierunku - znalazłem fajną stronę z nauką dla początkujących : http://dzono4.w.interia.pl/index.htm - ale poświęcam wiele czasu na przeróbkę własnego programu - i dodam te poprawki nad którymi właśnie pracuję (przy Waszej pomocy) do mojego programu. Dołączam tą część - choć wiele jeszcze brakuje z moich pomysłów. Między innymi po wpisaniu (Własność lub Komunalne)kursor powinien się ustawić w kolejnej linii w kolumnie B "numer lokalu" ( te wszystkie dane na początku są wykasowane) do wpisu danych następnego lokatora. Jednocześnie w wypadku gdy mieszkanie jest Własnościowe cały wypełniony wiersz powinien zmienić kolor (jak w przykładzie).??
  • #11
    adamas_nt
    Moderator of Programming
    Facetjanusz wrote:
    po wpisaniu (Własność lub Komunalne)kursor powinien się ustawić w kolejnej linii w kolumnie B "numer lokalu"
    Jak wspomniał już kolega marek003, zmienna 'Target' w procedurach zdarzeniowych posiada własności obiektu 'Range'. 'Column' już przerobiłeś, pokombinuj również z 'Row'.
    Facetjanusz wrote:
    Jednocześnie w wypadku gdy mieszkanie jest Własnościowe cały wypełniony wiersz powinien zmienić kolor
    Tu najprościej zastosować formatowanie warunkowe, gdzie regułą może być formuła porównująca.
  • #12
    Facetjanusz
    Level 15  
    Dzięki za podpowiedź - pobawiłem się trochę i dobrze mi to działa , z tym ,że jest gdzieś błąd i nieraz (co drugi) przeskakuje kursor o 2 kol do przodu i jeden wiersz do góry. Nie mogę sobie z tym poradzić. Przy kasowaniu rocznym także leci błąd.
    Pozdro - Janusz
  • #13
    adamas_nt
    Moderator of Programming
    Coś tam wyprostowałem.
    Code: vbscript
    Log in, to see the code
    Sprawdź czy działa.
  • #14
    Facetjanusz
    Level 15  
    Dzięki adams_nt - Widzę ,że uprościłeś makro, ale niestety (przykro mi) nic to nie pomogło. Spróbuj wpisywać w kolejnych liniach programu i zobaczysz jak w co drugiej linii z kolumny 4 kursor przechodzi ruchem konika szachowego.
    Druga sprawa to skićkałem kasowanie roczne (działało dobrze).
    I jeszcze na dodatek po kliknięciu na przycisk Zmiana ilości osób.. dziwny komunikat się pojawia.
    Bardzo bym Cię prosił popraw mi moje wypociny , bowiem nie mogę znaleźć przyczyny.
    Pozdrawiam
  • #15
    adamas_nt
    Moderator of Programming
    U mnie nic nie skacze...

    Jedyny błąd jaki przeoczyłem to linia 'ActiveCell.Offset(-1, 1).Select' powinno być 'Target.Offset(0, 1).Select' (pod koniec makra)

    Komunikat pojawia się, bo... posiałeś gdzieś makro "ewidencja_ksiegowa" (Okienko1.Show), a które jest w pierwszym załączniku ;)

    U mnie po naciśnięciu przycisku [Kasowanie Roczne] pojawia się komunikat z ostrzeżeniem, tabelka zostaje wyzerowana, i na końcu "Wykonano". Czyli działa(?)
    Jeśli ma się dziać coś innego, to napisz.
  • #16
    Facetjanusz
    Level 15  
    Dzięki bardzo - po wprowadzeniu proponowanej poprawki kursor ustawia się dobrze.
    Wpisałem również zagubione makro i wydaje mi się że będzie działać już dobrze!
    Pozdrawiam.
  • #17
    Facetjanusz
    Level 15  
    Witam ponownie.
    Prosiłbym jeszcze o cierpliwość adamsa i ewentualną pomoc w usprawnieniu mojego programu , ponieważ mimo moich wielu,wielu kombinacji nie udaje mi się go naprawić, a działa prawie dobrze (oprócz):
    1. Kiedy wpisuję pierwszy raz w lub k nie dopisuje reszty , ale po zatwierdzeniu enterem wpisuje i leci błąd. Następne linie już wpisuje normalnie.
    2. Dorobiłem kolorowanie wierszy po dopisaniu zdarzenia (działa O K) , ale kiedy daję Kasowanie roczne - to koloruje dodatkowo , podobnie jest podczas Czyszczenia zawartości. Próbowałem w kasowaniu kolorować te obszary na biało -niestety nie poradziłem sobie. Jeszcze raz proszę zerknąć na program i spróbować pomóc.
    Pozdrawiam Janusz
  • #19
    Facetjanusz
    Level 15  
    Na razie dzięki adams za pomoc i sorry za stratę czasu - chwilowo to odpuszczę i pokombinuję coś . Poprawiłeś świetnie jedno ale pokićkało się co innego. Od wiersza 11 nie koloruje po wpisie (nie mogę znaleźć dlaczego) i nie koloruje Zmiany powstałe w czasie trwania roku roku , pozostałość po Twoich poprawkach będzie działać.. Faktycznie pogubiłem się w formatowaniu warunkowym.
    Pozdrawiam
  • #20
    Facetjanusz
    Level 15  
    Witam ponownie.
    No udało mi się, program świetnie hula - z jednym małym problemem , mianowicie jeżeli wpisze się zmiana zielonym kolorem - komórki na stałe przyjmują ten kolor i podczas kasowania rocznego kasuje się na zielono. nie mogłem znaleźć w internecie jak wrócić do koloru podstawowego?? - Jakim kodem to zrobić ,proszę o pomoc.
  • Helpful post
    #21
    adamas_nt
    Moderator of Programming
    Jeśli tak uparcie trzymasz swojego, to przed 'End If' dopisz
    Code: vbscript
    Log in, to see the code
  • #22
    Facetjanusz
    Level 15  
    Spróbujemy p. adams. - Dzięki.

    Dodano po 2 [godziny] 20 [minuty]:

    Dzięki adams za podpowiedź i cierpliwość do mnie ( ja się dopiero uczę) , ale musiałem (ze zmianą parametrów) aż 4 razy tą poprawkę wprowadzić i teraz działa prawie dobrze , jedynie podczas kasowania rocznego nie powinno kasować wcześniej powstałego koloru w wierszu.