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.

Zaznaczanie i kopiowanie dynamicznego zakresu kolumn

haito 04 Kwi 2018 21:58 429 13
  • #1 04 Kwi 2018 21:58
    haito
    Poziom 13  

    Witam koledzy forumowicze.
    Potrzebuje pomocy w stworzeniu makra, które będzie kopiować zakres tabeli z jednego skoroszytu do drugiego.

    Ma to wyglądać następująco:
    1. Otwieram skoroszyt (nazwijmy go A) w którym są dwa arkusze, "1" i "2".
    2. W arkuszu "1" mam przycisk, który ma zaznaczyć zakres tabeli z karty "3" skoroszytu B (lub innego, które znajdują się w jakimś katalogu pod wskazaną ścieżką) i skopiować go do arkusza "2" skoroszytu A.

    Udało mi się znaleźć i zmodyfikować kod, który zaznacza zakres tabeli, która będzie zmieniała się dynamicznie. począwszy od komórki A7 i kończy na ostatniej wypełnionej komórki w kolumnie A. Jednak proszę o pomoc w modyfikacji tego kodu aby spełniał warunki opisane powyżej.

    0 13
  • #2 05 Kwi 2018 16:53
    Prot
    Poziom 30  

    haito napisał:
    Udało mi się znaleźć i zmodyfikować kod
    :?:
    Coś mi się zdaje, że modyfikowałeś ten kod tylko klawiszem delete ? :D

    Wg Twoich przykładowych plików makro "uruchamiane" ma być ze zwykłego pliku i kopiować z pliku z makrem ??? :please:

    Proponuje Ci przygotować najpierw właściwy plik typu xlsm i cały transfer danych przećwiczyć pomiędzy 2 arkuszami - w załączeniu masz przykład przetwarzania danych pomiędzy dwoma arkuszami :spoko:
    CB CASES3..ot.zip Download (426.1 kB)Punkty: 2 dla użytkownika

    0
  • #3 12 Kwi 2018 11:42
    haito
    Poziom 13  

    Niestety ale nic mi to nie mówi.

    Ostatecznie, potrzebuje skopiować wiersze ze schowka do istniejącej tabeli. Prościej mówiąc wstawić zawartość schowka pomiędzy wskazane wiersze.

    0
  • #4 12 Kwi 2018 19:08
    Prot
    Poziom 30  

    haito napisał:
    Potrzebuje pomocy w stworzeniu makra

    Wybacz kolego, ale ja czytam dokładnie co piszesz :cry:
    Zaglądam do Twoich plików ..., a tam nie ma żadnego makra :not: , które ponoć znalazłeś :?: - widzę, że wstawiłeś przycisk (bez żadnego kodu :?: ) do zwykłego arkusza kalkulacyjnego (nie będzie działać zarówno z braku kodu jak i ze względu na ograniczenia Excela - kod może być zastosowany tylko w "plikach z makrami" - np xlsm :!: ).

    Przesłałem Ci zatem plik z dwoma przyciskami, które realizują odrębnie zaprogramowane akcje, żebyś mógł przeanalizować - sposób uruchamiania makra przyciskiem :idea:

    Ty zamiast to przeanalizować - oczekujesz jakiegoś gotowca :cunning: :?:

    0
  • #5 12 Kwi 2018 19:24
    haito
    Poziom 13  

    Niestety kolego ale jesteś w błędzie.
    Nie szukam gotowego rozwiązania, ponieważ stworzyłem makro w bazowym skoroszycie, które uruchamia makro w innym skoroszycie i wycina z niego wiesze zmieniające się dynamicznie.
    Przygotowałem również formułę wkleja te wiersze znajdujące się w schowku do odpowiedniego miejsca w bazowym skoroszycie. Jednak nie mogę sobie poradzić aby wklejając przesuwało mi dolne wiersze, a nie nadpisywało na nie nowe.
    Proszę o to kod.


    Sub OtworzOferte()
    Dim wb As Workbook
    Set wb = Workbooks.Open("C:\Users\Haito\Desktop\" & Worksheets("dane").Range("d5") & ".xlsm")
    Application.Run "'" & wb.Name & "'!copytable"
    ActiveWorkbook.Close SaveChanges:=False
    End Sub


    Sub pastes()
    Worksheets("faktura").Range("A21").PasteSpecial _
    paste:=xlAll
    Application.CutCopyMode = False
    End Sub

    0
  • #6 12 Kwi 2018 20:04
    clubs
    Poziom 31  

    Witam
    A tak robiłeś?

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    0
  • #7 12 Kwi 2018 21:28
    haito
    Poziom 13  

    Oczywiście.
    Ten kod wstawia jedynie nowy wiersz.

    0
  • #8 13 Kwi 2018 06:15
    clubs
    Poziom 31  

    haito napisał:
    Ten kod wstawia jedynie nowy wiersz

    Bardziej mi chodzi o to żebyś to wstawił w procedure "OtworzOferte"
    Czyli
    otwierasz
    kopiujesz
    wstawiasz
    zamykasz

    0
  • #9 13 Kwi 2018 06:39
    haito
    Poziom 13  

    To nie pomoże.

    0
  • #11 13 Kwi 2018 10:20
    haito
    Poziom 13  

    To nie pomoże.

    clubs napisał:
    haito napisał:
    Ten kod wstawia jedynie nowy wiersz

    Bardziej mi chodzi o to żebyś to wstawił w procedure "OtworzOferte"
    Czyli
    otwierasz
    kopiujesz
    wstawiasz
    zamykasz


    w pozycji 'wstawiasz' o której piszesz i tak muszę wpisać ścieżkę tego bazowego skoroszytu, a przecież mogę wkleić zawartość schowka w każdym otwartym dokumencie. Po za tym, jeśli wstawiam to ciągle muszę napisać kod, który wstawi nowe wiersze w tabele, a nie poza jej zakres.


    W załączniku to o co mi chodzi.
    Żółte pola będą wklejane z zawartości schowka.

    0
  • #13 13 Kwi 2018 11:14
    haito
    Poziom 13  

    Prot napisał:
    A gdzie jest ten plik FV wzór.xlsm :?:
    A gdzie jest ten kod testowany przez Ciebie :?:


    @Prot zamiast pomagać piszesz ciągle jakieś uwagi, które nie mają znaczenia... jeśli nie możesz lub nie chcesz pomóc to proszę zakończ te komentarze. Sprawa jest banalna (jestem jednak laikiem więc dla mnie nie).
    W sumie z wszystkim sobie poradziłem, moje makra działają wg potrzeb, oprócz ostatniej operacji. Myslę że dla osoby która jest obeznana w VBA opracowanie kodu nie zajmie dłużej niż 120sek.

    Więc prościej. Jak zmodyfikować poniższy kod aby powodował wklejenie zawartość schowka pomiędzy wiersz 21 a 22? A wiersz 22 będzie przesuwany o tyle wierszy ile nowych zostało dodanych.

    Sub pastes()
    Worksheets("faktura").Range("A21").PasteSpecial _
    paste:=xlAll
    Application.CutCopyMode = False
    End Sub

    0
  • #14 13 Kwi 2018 12:05
    lanzul
    Poziom 26  

    haito napisał:
    Zaznaczanie i kopiowanie dynamicznego zakresu kolumn

    A w treści piszesz o wierszach ...
    haito napisał:
    Jednak proszę o pomoc w modyfikacji tego kodu aby spełniał warunki opisane powyżej

    Załączyłeś ... dopiero później ...
    haito napisał:
    Udało mi się znaleźć i zmodyfikować kod, który zaznacza zakres tabeli

    Kod, który załączyłeś tyczy się zupełnie czegoś innego ...
    haito napisał:
    @Prot zamiast pomagać piszesz ciągle jakieś uwagi, które nie mają znaczenia

    Mylisz się, albo jesteś rozdrażniony ... co na jedno wychodzi ...
    Kolega Prot, jak przyjrzeć się jego działalności na forum, nie czyni uwag dla nich samych, żeby sobie humor poprawić ...
    Przejrzyj swoje wpisy krok po kroku ... dałeś za mało danych lub delikatnie mówiąc "odrobinę" mylące, nieczytelne ...
    Kod: vba
    Zaloguj się, aby zobaczyć kod


    Kod: vba
    Zaloguj się, aby zobaczyć kod

    Dlaczego tak uparłeś się na kopiowanie przez schowek aplikacyjno/systemowy ?
    Najlepiej zrobić to poprzez zmienną, nie obciąży tak pamięci systemowej i jej nie zdezorganizuje.

    Najlepsza byłaby zmienna tablicowa, nie tylko przeniesie dane, ale również da ci informację o ilości przenoszonych wierszy, co pozwoli dodać ich odpowiednią ilość przed wklejeniem w miejsce docelowe.
    Punkty "kotwiczne" danych źródłowych są dość jasno określone: od góry wiersz nagłówkowy tabelki, zaś od dołu "puste wiersze, względnie wiersz podsumowań ("RAZEM:").
    W takim układzie możesz zastosować:
    Kod: vba
    Zaloguj się, aby zobaczyć kod

    , gdzie 'PKS' to zmienna przenosząca dane. Deklarujesz ją jako 'Public'.
    Info o ilości wierszy masz już w zmiennej 'wrs', lub możesz zastosować:
    Kod: vba
    Zaloguj się, aby zobaczyć kod

    W arkuszu zdawczym wyliczasz położenie ostatniego wiersza tabelki, tj. wiersza podsumowań ("RAZEM:") i począwszy od tego wiersza, niech to będzie przykładowo wiersz nr 8, wstawiasz np. 6 wierszy, czyli:
    Kod: vba
    Zaloguj się, aby zobaczyć kod

    Następnie wklejasz dane z PKSu, który właśnie przyjechał na dworzec ... i po sprawie:
    Kod: vba
    Zaloguj się, aby zobaczyć kod

    'ilosc_kolumn' masz ściśle określoną "na zaś", tylko na Swaroga ! nie stosuj komórek scalanych, chyba że jesteś "sado-maso" ... :(
    Na początku modułu dajesz 'Option Base 1', żeby vba liczył od 1 a nie od 0.

    Z innych rozwiązań
    Możesz też zamienić tabelkę zadwczą (plik "A") w listę (ListObject), wtedy samoczynnie będzie się "powiększać" ... oczywiście jeśli trafisz w odpowiedni wiersz ... ten z "gwiazdką" ... :)

    1
  Szukaj w 5mln produktów