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.

Jak zrobić makro w vba, aby dane z arkusza2 zaciągały się do tabeli w arkuszu1

Tinus 05 Lip 2011 18:32 3865 10
  • #1 05 Lip 2011 18:32
    Tinus
    Poziom 7  

    Witam,
    Jeśli to tylko możliwe BARDZO PROSZĘ o napisanie mi tu na forum przykładowego makra dla takiej oto sytuacji:
    Utworzyłam w vba formularz, w którym są 2 comboboxy. W pierwszym z nich powinna być lista z kolumny zawierajęcej nazwiska osób. W drugim z nich powinny pojawiać się dane z innej kolumy (np. miejscowości) z tym, że w tym drugim comboboxie nie powinny być wszystkie dane z kolumny lecz tylko pasujące do odpowiedniego nazwiska (np. 1 combobox - wybieram Kowalski, to w 2 comboboxie powinnam mieć do wyboru tylko np. Warszawę i Łódź). Niestety nie wiem jak to zrobić. Cały czas mam w jednym comboboxie całą listę z kolumny A,w drugim comboboxie listę z całej kolumny B.
    To był pierwszy problem. Teraz drugi. Chcę aby dane do tych comboboxów zaciągały się z Arkusza2, ale wpisywały się w odpowiednie komórki tabeli w Arkuszu 1. Nie wiem jak to zrobić.
    Trzeci problem: Chcę aby na podstawie dwóch warunków w formularzu wypełniały się odpowiednio komórki w tabeli w Arkuszu1 (czyli jeśli w formularzu wybiorę Kowalski i Warszawę to wtedy powinny wypełnić się pozostałe komórki tabeli dot. np. rodzaju zakupionego towaru, ceny...). Wszystkie potrzebne dane mam w Arkuszu2.

    Za pomoc będę niezwykle wdzięczna. Próbowałam sama na podstawie wiedzy z google ale niestety marnie mi to wychodzi. Jestem z tego zielona. Potrafię zrobić tylko najbardziej podstawowe rzeczy.

    Pozdrawiam

    0 10
  • #3 06 Lip 2011 15:25
    Tinus
    Poziom 7  

    Niestety nie może to być tabela przestawna bo dane mają wpisywać się do pewnej przygotowanej już przez kogoś innego tabeli stanowiącej Formularz, z którego będą korzystały różne osoby.

    Dodano po 17 [minuty]:

    Właściwie to metodą prób i błędów większość udało mi się zrobić.

    Dla UserForm1 i UserForm2:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Do tego momentu jest wszystko i to powyżej jest dobrze. Pozostałe komórki wypełniają mi się formułą
    =INDEKS(miejsce_odbioru;PODAJ.POZYCJĘ(3;(KRYT1=AA14)+(KRYT2=I14)+(KRYT3=A14);0))

    Ale nie umiem zrobić tak, żeby wpisywały się dane do większej ilości wierszy. Dobrze by było żeby robiło się coś w tym stylu:

    Kod: select_vb
    Zaloguj się, aby zobaczyć kod

    i tak aż do aa20 i a20.

    Proszę o pomoc.

    Nie zawsze wszystkie wiersze od a14 do aa14 mają się wypełniać. Czasem pozostają puste bo nie wybieram kolejnych rzeczy z ListBoxu. Mają się wypełniać wiersze do momentu kończenia wybierania kolejnych rzeczy w ListBoxie.
    Chciałabym żeby makro jeszcze na koniec ukrywało wiersze, które pozostają puste.

    Pozdrawiam

    Proszę pamiętać o używaniu znaczników syntax. Opcja Listing kodu. - arnoldziq

    0
  • #4 06 Lip 2011 18:22
    adamas_nt
    Moderator Programowanie

    Tinus napisał:
    Ale nie umiem zrobić tak, żeby wpisywały się dane do większej ilości wierszy.
    Chodzi o pętlę?
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #5 06 Lip 2011 22:57
    Tinus
    Poziom 7  

    Niestety ta pętla nie rozwiązuje problemu. Działa ona tak, że do tabeli we wszystkich zadanych komórkach wpisują się te same dane. Czyli jest tak, że wybieram Kowalskiego z ListBoxu i w każdej zadanej komórce mam Kowalskiego. Jak wybieram Iksinskiego to jest Iksinski. A ja chciałabym mieć możliwość wyboru Kowalskiego tak żeby dane wpisały mi się do komórki aa14, następnie chcę wybrać Iksińskiego i on ma się wpisać do komórki aa15 itd.
    Ale jest pomysł: możnaby napisać makro tak, aby wypełniał się kolejny wiersz niepusty. Podpowie mi ktoś jak to napisać?

    Kolejna rzecz - proszę o pomoc w sprawie takiej, aby po zaznaczeniu klawiszem ctr kilku wierszy z ListBoxa wszystkie te rzeczy wpisywały mi się kolejno w odpowiednie komórki.

    Serdecznie pozdrawiam

    Dodano po 1 [godziny] 22 [minuty]:

    Przepraszam za błąd, chodziło mi o to, że możnaby napisać makro tak, aby wypełniał się kolejny wiersz pusty.

    Dodano po 1 [godziny] 50 [minuty]:

    Na razie wymyśliłam jedynie jak zrobić aby wklejały się dane do dwóch wierszy. Nie wiem jak zrobić żeby wklejały się do większej ilości wierszy (do tylu ile wybiorę w ListBoxie).

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #6 07 Lip 2011 21:23
    Tinus
    Poziom 7  

    Hm... może ktoś podpowie mi jeszcze co innego - co należy zrobić i wpisać w vba gdy mam 2 identyczne ListBoxy i chcę aby działo się tak: wybieram coś w ListBox1 i automatyczne to samo wybiera mi się w ListBox2?

    0
  • #7 07 Lip 2011 22:26
    adamas_nt
    Moderator Programowanie

    Cóż, wiemy, że Ty wiesz co jest w formularzu i jak ma działać. Z naszej strony można się tylko domyślać, a domysły prowadzą do straty czasu. Nie wiadomo, czy chodzi Ci o MultiSelect, czemu ma służyć wyszukiwanie indeksu listy na podstawie wyboru w drugiej...
    Wrzuć przykładowy plik z opisem co, gdzie i dlaczego. Pomyślimy i być może coś z tego wyniknie :)

    0
  • #8 08 Lip 2011 22:29
    Tinus
    Poziom 7  

    Racja, najlepiej myśli się widząc przykład. Przygotowałam plik. Wszelkie dane są z "sufitu". Opisałam w nim co chcę uzyskać. Mam nadzieję, że wystarczy. Prawdziwego pliku nie mogę przedstawić.

    Pozdrawiam

    0
  • #9 08 Lip 2011 22:32
    Tinus
    Poziom 7  

    Aha, w ListBoxie chodzi o MultiSelect.

    0
  • Pomocny post
    #10 09 Lip 2011 08:30
    adamas_nt
    Moderator Programowanie

    Jeśli dobrze zrozumiałem Twoje intencje, to wystarczy jeden listbox w formularzu (patrz załącznik).
    Filtrowanie listy na podstawie wyboru realizuje się nieco inaczej. Tutaj są przykłady.

    0
  • #11 09 Lip 2011 14:12
    Tinus
    Poziom 7  

    adamas_nt - bardzo mi pomogłeś. Wielkie Dzięki :) Przeczytałam też forum, do którego dałeś linka i teraz znacznie więcej rozumiem :)

    0