Elektroda.pl
Elektroda.pl
X
SterControl
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[Excel VBA] makro przesuwające wybraną część danego wiersza

defusor 02 Mar 2012 17:31 2861 13
  • #1 02 Mar 2012 17:31
    defusor
    Poziom 10  

    Witam chciałbym stworzyć makro, pozwalające przesunąć wybraną część wiersza w sposób automatyczny po wpisaniu formuły w postaci jakieś wartości. Czy jest taka możliwość? Na języku Visial Basic kompletnie się nie znam, a rejestrator makr umożliwia przesunięcie danego fragmentu wiersza, ale tylko za pomocą klawisza skrótu, Problemem staję się również fakt, że po dodaniu daty zakres kopiowania musiałby zwiększać się o 1. Czy ktoś jest w stanie chociażby nakierować mnie jak to zrobić?

    0 13
  • SterControl
  • #2 02 Mar 2012 19:45
    dkow
    Poziom 14  

    Na pewno jest taka możliwość.
    Musiał byś tylko jaśniej objaśnić co potrzebujesz, bo to makro z pliku, który umieściłeś tylko bardziej zagmatwało sprawę.

    0
  • #3 02 Mar 2012 19:57
    defusor
    Poziom 10  

    Makro postepuje tak:

    Gdy wpisze coś w kolumnę I. I następnie użyje skrótu cltr + n to przesunie te wartości w prawo. Dodatkowo tworzy się kolumna jako bufor. Bo nie chce aby przesuwało się to co jest za datami.

    Najlepiej byłoby, gdyby po wpisaniu w kolumne I automatycznie wszystkie daty danego wiersza przesuneły się po prostu w prawo bez zmiany dalszych kolumn(R,S,T,...), by tak mogło być przy każdym wpisie potrzebna jest jedna komórka więcej dla danego wiersza. Tak samo musi stać się przy kopiowaniu. Musiałoby kopiować i wklejać o 1 komórkę więcej.

    Osobiście to makro gmatwa mi sprawę również. Szkoda, że nie ma czegoś takiego jak copy n +1 i jakiś warunek.

    0
  • SterControl
  • #4 02 Mar 2012 20:15
    dkow
    Poziom 14  

    Czyli tak.
    Wpisuje nową datę np. w I4, następnie naciskam ctrl+n co powoduje że wiersze od I4 do P4 przesuną się na pozycję J4 do Q4. Czy tak?
    Jeszcze nie wiem o co ci chodzi z kopiowaniem.

    0
  • #5 02 Mar 2012 20:20
    defusor
    Poziom 10  

    Dokładnie tak ma się to zachować. (czy da się to robić bez skrótu ctrl + n, czyli po wpisaniu automatycznie kopjuje)
    Po następnym wpisaniu daty w I4 powinno kopiować zakres dat z I4 do R4 itd.

    0
  • Pomocny post
    #6 02 Mar 2012 21:21
    dkow
    Poziom 14  

    Nie wiem co miałeś na myśli
    Po następnym wpisaniu daty w I4 powinno kopiować zakres dat z I4 do R4 itd.
    Ale pozostałe funkcje działają.

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Funkcja "Worksheet_Change" opisuje zdarzenie dla Arkuszu1 / Worksheet / Change
    Cały kod powinien być zawarty w Arkusz1.

    0
  • #7 02 Mar 2012 21:39
    defusor
    Poziom 10  

    Działa świetnie.
    Przenosi wartości, ale zauważ, że data która przekroczy zakres Q znika. Chciałbym żeby one dalej się archiwizowały. Dobrze by było jakby po zapełnieniu się wszystkich okien od J do Q. to następnie zaczełoby tworzyć nowe kolumny by te watości nadal były

    0
  • #8 02 Mar 2012 21:53
    dkow
    Poziom 14  

    Określ dokładnie miedzy które kolumny należy wstawiać nową kolumnę.
    Tylko, że takie rozwiązanie zaburzy porządek kolumn względem innych wierszy.
    Możemy zrobić również tak aby kolumny przesuwały się tylko w danym wierszu (tym w którym właśnie wstawiono nową datę) co też nie jest idealne.

    0
  • #9 02 Mar 2012 22:00
    defusor
    Poziom 10  

    Między Q i R powinna wchodzić nowa kolumna. Niestety zdaję sobie z tego sprawę, że może to zaburzyć porządek. Wstawienie kolumny tylko dla danego wiersza jest dobre. Pytanie czy to nie przesunie porządku kolumn od R.

    0
  • #11 02 Mar 2012 22:35
    defusor
    Poziom 10  

    To nie wchodzi w grę twoje pierwsze rozwiązanie jest lepsze. Myślę, że stworzę ok 50 kolumn wstawie je jako grupę co umożliwi mi jej schowanie.a w linijce

    Kod: vb
    Zaloguj się, aby zobaczyć kod
    a zamienie na 49 i bedzię super.

    Miałbym jeszcze jedno pytanie dotyczące tego pliku. Czy jest możliwość by po sformatowaniu tych kolumn jako daty, by sprawdzało ostatnią kolumnę ''J'' z czasem rzeczywistym. I jeśli przekroczy 2 miesiące to podświeli się na jakiś kolor

    0
  • #12 02 Mar 2012 22:51
    dkow
    Poziom 14  

    Tak.
    Zobacz jak się używa w Excelu "Formatowanie warunkowe" a jako pierwszy argument podaj kolumne J+60 a drugi jako TERAZ()

    0
  • #13 02 Mar 2012 23:10
    defusor
    Poziom 10  

    Coś źle napisałałem chodzi mi o to, że jak włącze excela i jeśli wpisałem jakąś date i ta znajduję się w komórce J to podświetli się np: na zielono po 2 miesiącach autoamtycznie.

    0