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.

VBA Excel - Kopiowanie danych oraz przypisanie do nich wartości.

kwitu86 05 Lut 2016 23:12 849 18
  • #1 05 Lut 2016 23:12
    kwitu86
    Poziom 10  

    Cześć,

    mam pewien problem odnośnie rozwiązania przypisania danej wartości w każdym wierszu gdzie następuje kopiowanie danych z jednego arkusza do drugiego.

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod



    Jednak chciałbym aby do każdego wiersza skopiowanego do arkusza docelowego zawsze znajdowała się informacja o miesiącu za jaki te dane są. ( w kolumnie K ) Miesiąc ten jest zapisany w arkuszu "Check point" w komórce K1.
    Istnieje na to jakiś prosty sposób?

    0 18
  • #2 05 Lut 2016 23:47
    adamas_nt
    Moderator Programowanie

    Trzeba dopisać.

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    0
  • #3 06 Lut 2016 20:53
    kwitu86
    Poziom 10  

    cześć,

    niestety wyskakuje mi komunikat Subscrip out of range.

    w momencie

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    pomysł czemu tak jest ?

    0
  • #4 06 Lut 2016 21:50
    adamas_nt
    Moderator Programowanie

    kwitu86 napisał:
    Miesiąc ten jest zapisany w arkuszu "Check point" w komórce K1.
    Zrobione wg instrukcji ;) No, prawie. Ale wielkość liter nie powinna szkodzić...

    A w którym pliku jest ta data: docelowym/źródłowym? Może podstaw zmienną (wsSrc lub wsWyn).

    0
  • #5 06 Lut 2016 22:24
    kwitu86
    Poziom 10  

    No niestety nie chce zadziałać nawet po zmianie danych.


    Dany miesiąc jest w arkuszu docelowym w komórce K1.

    I nie mam pojęcia co to moze być...

    0
  • #6 06 Lut 2016 22:44
    adamas_nt
    Moderator Programowanie

    Skoro

    Cytat:
    Set wswyn = ThisWorkbook.Worksheets("Check Point") 'ustawienie bieżącego arkusza

    to powinno być: =wswyn.Range("K1")

    0
  • #9 06 Lut 2016 23:09
    kwitu86
    Poziom 10  

    Nie zauważyłem Twojego wcześniejszego wpisu.

    Faktycznie wpis:

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    rozwiązuje tą kwestię. Dziękuję za pomoc! Działa w pełni.

    0
  • #10 11 Lut 2016 14:48
    kwitu86
    Poziom 10  

    Powstał dla mnie jeszcze jedna kwestia, powstała ona w momencie gdy jedna z kolumn w pliku źródłowym nie występuje ( np wartości opisane jako B - plik źródłowy nie generuje danych z takimi wartościami, pomija taką kolumnę )

    W związku z tym czy można zmodyfikować kod wgrywania danych tak, aby dane jeszcze były porównywane po wartościach z pliku docelowego z wiersza 5 i przypisywało odpowiednio te wartości ?

    0
  • #12 13 Lut 2016 14:53
    adamas_nt
    Moderator Programowanie

    Hmm... Na moje oko kopiujesz tylko jedna kolumnę:

    kod napisał:
    Sheets("check point").Cells(wrs1 + 6, 3)
    Co z pozostałymi (jakby brakowało jednej pętli)? Czy może być odwrotna sytuacja, że w pliku źródłowym jest w nagłówku fraza (wiersz Nr 5), która nie występuje w docelowym (rozważam szukanie w źródłowym kolejno z docelowego)?

    0
  • #13 14 Lut 2016 12:07
    kwitu86
    Poziom 10  

    Mój przykład faktycznie szuka tylko jednej wartości - na dodatek zobaczyłem, że jak wartość w kolumnie między wierszami jest pusta to przerywa kopiowanie...


    Chciałbym zdefiniować jakie dane mają być wyszukiwane w pliku docelowym, aby dogrywać je z pliku źródłowego. Zdarzyć się może ( chociaż nie powinno ), że plik źródłowy może mieć więcej danych niż jest w pliku docelowym.

    Pytanie jak do tego podejść i to rozwiązać?

    0
  • #14 14 Lut 2016 14:20
    adamas_nt
    Moderator Programowanie

    Spróbuj w poniższy sposób. Jeśli nie chcesz kopiować danych z wybranej kolumny - po prostu usuń nagłówek w pliku docelowym.
    Makro działa odwrotnie niż w Twoim przykładzie. Tzn wyszukuje kolejnych nagłówków pliku źródłowego w docelowym, jeśli nie znajdzie - warunkowo pomija (MsgBox - po wybraniu kontynuuj). Przy okazji posprzątałem co nieco ;)

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    0
  • #15 14 Lut 2016 21:26
    kwitu86
    Poziom 10  

    Nie będę ukrywał - za trudne jak na mój poziom w tej kwestii.

    Dziękuję za pomoc bo to znaczącą przyczynia się do zwiększania wiedzy, która ciągle jest mała.

    A co trzeba jeszcze zmienić w pliku oprócz usunięcia kodu:

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    aby dane się nie kasowały a istniała możliwość przypisywania jedno pod drugim ?

    0
  • #16 14 Lut 2016 21:33
    adamas_nt
    Moderator Programowanie

    Dopisać zmienną, odszukać ostatni wiersz w arkuszu wsWyn, przypisać do zmiennej (podobnie jak robiłeś z 'FinalRow') i w pętli zamiast "i" używać tej zmiennej

    wsWyn.Cells(i, kol1) = wsSrc.Cells(i, kol)

    zwiększając jej wartość przy każdym przebiegu (zmienna=zmienna+1)

    0
  • #17 14 Lut 2016 22:01
    kwitu86
    Poziom 10  

    ok ale coś robie nie tak jeszcze....

    zdefiniowałem zmienną i przypisałem do kodu, więc nie działa ciągle dane się kasują

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    0
  • #18 14 Lut 2016 23:49
    adamas_nt
    Moderator Programowanie

    Oj, trochę odważniej z tymi zmiennymi ;)
    Porównaj z poprzednim

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    0
  • #19 15 Lut 2016 08:53
    kwitu86
    Poziom 10  

    No faktycznie że trochę odwagi zabrakło.
    To pokazuje =, że ciągle dużo do nauki.

    Dziękuję za pomoc - jeszcze nie zamykam tematu bo coś zawsze może się pojawić.

    0