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

Skrypt VBA - kopiowanie zakresu w Microsoft Office Excel

alvarofun 08 Lip 2012 21:18 3920 12
  • #1 08 Lip 2012 21:18
    alvarofun
    Poziom 17  

    Jest sobie procedura

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    i wszytko ok, wpisuje w A1 ble ble i w H1 mam ble ble
    a jak zrobić żeby w zakresie A1:B2 te 4 komórki przepisało do zakresu H1:I2

    0 12
  • #2 08 Lip 2012 21:32
    adamas_nt
    Moderator Programowanie

    Nie precyzujesz dokładnie. Procedura dla każdej komórki w zakresie, czy przy zmianie w jednej kopiowanie określonego zakresu? Arkusz źródłowy i docelowy inny, czy w obrębie jednego?

    0
  • #3 09 Lip 2012 00:18
    alvarofun
    Poziom 17  

    adamas_nt napisał:
    przy zmianie w jednej kopiowanie określonego zakresu Arkusz źródłowy i docelowy inny


    Dodano po 2 [godziny] 41 [minuty]:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    taki zapis był by oki, gdyby nie to że z komórki A1 kopiuje to samo do
    D1 D2
    E1 E2

    a mi chodzi oto żeby skopiowało
    A1 do D1
    A2 do D2
    B1 do E1
    B2 do E2

    Cały zakres od A1:B2 skopiowało do D1:E2
    i przy tym jeśli zaedytuje choć by jedną komórke z tego zakresu A1:B2 to żeby sie zakres zmienił w D1:E2

    0
  • #4 09 Lip 2012 00:55
    marcinj12
    Poziom 40  

    Kod: vb
    Zaloguj się, aby zobaczyć kod
    , a warunek sprawdzający Target.Address musisz rozszerzyć na te 4 komórki które chcesz monitorować, albo użyć Intersect() do sprawdzenia przecięcia regionów.

    0
  • #5 09 Lip 2012 23:12
    alvarofun
    Poziom 17  

    marcinj12 napisał:
    Kod: vb
    Zaloguj się, aby zobaczyć kod
    , a warunek sprawdzający Target.Address musisz rozszerzyć na te 4 komórki które chcesz monitorować, albo użyć Intersect() do sprawdzenia przecięcia regionów.


    właśnie tego target.addressu nie rozkminiam wpisuje tam A1:B2 i nic nie zmienia :/

    Kod: vb
    Zaloguj się, aby zobaczyć kod
    to nie działa :(

    Dodano po -1 [godziny]:

    marcinj12 napisał:
    Kod: vb
    Zaloguj się, aby zobaczyć kod
    , a warunek sprawdzający Target.Address musisz rozszerzyć na te 4 komórki które chcesz monitorować, albo użyć Intersect() do sprawdzenia przecięcia regionów.


    właśnie tego target.addressu nie rozkminiam wpisuje tam A1:B2 i nic nie zmienia :/

    Kod: vb
    Zaloguj się, aby zobaczyć kod
    to nie działa :(

    0
  • #6 09 Lip 2012 23:31
    marcinj12
    Poziom 40  

    Bo Target.Address będzie równy zakresowi komórek tylko wtedy, kiedy dokonają się zmiany w całym tym zakresie, np. przy jednoczesnym wklejeniu w wiele komórek lub usunięciu ich wartości. Wstaw sobie w zdarzeniu Change

    Kod: vb
    Zaloguj się, aby zobaczyć kod
    i popatrz, jakie przyjmuje on wartości przy różnych zmianach.
    O warunku OR coś słyszałeś?? Skoro masz przykład dla jednej komórki, to rozszerz go na cztery:
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    albo zastosuj sprawdzanie przecięcia obszarów funkcją Intersect:
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #7 10 Lip 2012 00:02
    alvarofun
    Poziom 17  

    dalej, coś mi to nie działa

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #8 10 Lip 2012 00:18
    marcinj12
    Poziom 40  

    Samo

    Kod: vb
    Zaloguj się, aby zobaczyć kod
    działa ja powinno. Możesz dodać Sheets("Arkusz1"). przed Range żeby makro działało też uruchamiane z innego arkusza.
    Jeżeli coś nie działa, to pewnie problem innej części kodu - po tym fragmencie który wkleiłeś podejrzewam, że w zmiennej Data masz datę w formacie daty, a w warunku select porównujesz ją do zwykłego stringa, spróbuj porównać do Case CDate("2012-01-01")...

    0
  • #9 10 Lip 2012 17:38
    alvarofun
    Poziom 17  

    ale samo jest mi bez użyteczne, muszę mieć warunek żeby to makro działało

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    tym warunkiem jest właśnie ta zmienna data w formacie daty,
    prubowałem porównać do Case CDate("2012-01-01") i też mi nie wychodziło :(

    już tracę siłę nad tym makrem :/

    0
  • #10 10 Lip 2012 21:21
    marcinj12
    Poziom 40  

    Wrzuć plik na forum to się zobaczy...

    0
  • #11 10 Lip 2012 22:34
    alvarofun
    Poziom 17  

    W arkuszu dane jest u góry komórka w której będzie możliwość wprowadzenia miesiąca, w dane wiersz milionowy jest tabela z całymi danymi ,z których przy wyborze miesiąca będzie obszar całego miesiąca kopiowany do arkusza "sheet2".
    Jak już wszystko będzie oki działać, to sobie dam w vb żeby ukryć te wiersze, żeby nikt nie widział że one tam są, ale żeby one tam były.

    Arkusz sheet2 będzie na gotowo, i z niego będę drukował raport

    Przykładowo:

    wpisuje w arkuszu DANE "2012-01-01"
    i w Arkuszu Sheet2 ustawiane są dni miesiąca, tygodnia, formatowanie warunkowe i w ogóle, do tego jest potrzebny ten warunek, jeżeli w arkuszu Sheet2 będzie miesiąc 2012-01-01 to wtedy z arkusza DANE obszar Z1000006:BD1000030 zostanie przekopiowany do arkusza Sheet2 w miejsce od C8:AG32

    Wydawało by się bardzo proste a tu proszę ile przyswoiło kłopotu :(

    Dodano po 48 [sekundy]:

    A tu załącznik w zipie

    0
  • Pomocny post
    #12 11 Lip 2012 00:03
    marcinj12
    Poziom 40  

    Strasznie to wszystko zakręcone, a na dodatek niepotrzebnie komplikujesz sobie życie... Tak naprawdę to by to wszystko można zrobić na funkcjach, bez użycia VBA. No, ale...
    Zacznijmy od tego że poprzednie makro się wywalało, bo w złym miejscu umieściłeś sprawdzanie warunku: jeżeli masz zdarzenie Change wywoływane zmianą w arkuszu, to jeżeli w tym zdarzeniu zmieniasz wartość innej komórki arkusza, to zdarzenie samo siebie wywoła w nieskończonej pętli aż do wystąpienia błędu.

    Po drugie - jak się ma "problem" kopiowania 4 komórek o który pytałeś z tym co teraz opisujesz? Ja tu nigdzie nie widzę potrzeby na makro kopiujące cztery komórki przy zmianie w innych czterech.

    Jeżeli po zmianie daty w komórce H3 arkusza Dane chcesz skopiować cały miesiąc z tej "bazy" w milionowych wierszach, to moim zdaniem wystarczy coś takiego w arkusz Dane:

    Kod: vb
    Zaloguj się, aby zobaczyć kod
    Prymitywne i proste kopiowanie kolumnami jeśli miesiąc pasuje, ale działa...

    0
  • #13 11 Lip 2012 01:22
    alvarofun
    Poziom 17  

    Właśnie oto mi chodziło.

    Bardzo Dziękuję :)

    0