Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

VBA - Jak przypisać kilka czynności do jednej pozycji z ComboBOX w Excel VBA

bartezzzz 25 Kwi 2013 23:38 4431 7
  • #1 25 Kwi 2013 23:38
    bartezzzz
    Poziom 6  

    Witam,

    w Excel VBA zrobiłem sobie formularz w ktorym dodałem ComboBox zawierający dane z arkusza 1 od B2 do B10. Po wybraniu pozycji w ComboBox program wstawia mi tą wartość do komórki F9 w arkuszu 3.
    Chcę teraz wstawić zależność, że jesli w Combobox zostanie wybrana pozycja nr1 to do kolejnej komórki zostanie pobrana inna wartość już z arkusza 2.

    Mam 3 arkusze z danymi w tabelkach:
    arkusz 1 - Centrale
    arkusz 3 - OFERTA

    W formularzu jest ComboBox w którym wybieram pozycję np. pierwszą
    to wówczas do arkusza oferta w komórce F9 wstawi się pozycja z arkusza 1 z komórki B2 a do komórki G9 w ofercie wstawi mi się opis towaru ktory znajduje się w arkuszu 1 komórka B3

    napisałem coś takiego ale nie działa:

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0 7
  • #2 26 Kwi 2013 18:41
    czeles
    Poziom 15  

    Zmieniłem nieco kod, tak aby procedura działała.

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    centraleBox zwraca liczę z kropką dziesiętną, natomiast centraleBox.List(centraleBox.ListIndex) zwraca liczbę z przecinkiem.

    0
  • #3 28 Kwi 2013 14:43
    bartezzzz
    Poziom 6  

    Uzupełniłem kod ale nie działa mi IF i kopiowanie do komórki f9 w arkuszu oferta.
    Przesyłam w załączniku plik. Czy możesz mi napisać co tu jest nie tak?
    Ponadto zależy mi na tym aby dodać zależność taką:

    Jeśli w ofercie pierwsza pozycja jest pusta to program kopiuje do pierwszego pustego wiersza daną pozycję. Chodzi o to, że jak wybiorę coś z drugiego comboboxa a z pierwszego nie to powinien wklejać do pierwszego wolnego wiersza od góry

    0
  • #4 28 Kwi 2013 16:09
    adamas_nt
    Moderator Programowanie

    Zdaje się, że próbujesz oprogramować nie to zdarzenie pola kombi. Interesuje nas zmiana wartości w polu, nie kliknięcie w nie.
    W Twoim przykładzie Nr indeksu pasuje do tabeli, z której pobierasz dane (RowSouce), więc nie ma problemu z przypisaniem i tak zrobiłem w załączonym przykładzie.

    Zwróć uwagę na deklarację zmiennej publicznej i przypisywanie jej wartości w różnych miejscach projektu. Może to niezbyt czytelne, ale bardzo wygodne.

    Zastosowałem kilka instrukcji warunkowych, żeby nie "wyjechać" z pozycjami poza formularz.

    Przeanalizuj, dostosuj do własnych potrzeb.

    0
  • #5 29 Kwi 2013 13:47
    bartezzzz
    Poziom 6  

    Działa świetnie o to chodziło a idąc za tematem mógłbyś mi podpowiedzieć co zrobić aby formularz dodawał wiersz w tabelce z ofertą. chozdi o to aby zamiast komunikować o tym że formularz jest pełen to wstawić kolejny wiersz z wybraną pozycją z comboboxa.
    Dodatkowe pytanie - jeśli chciałbym umieścić guzik na formularzu typu - wydrukuj ofertę lub wyślij ją mailem to powinienem skrypt wykonujący tą czynność umieszczać w module tak ?

    0
  • #6 29 Kwi 2013 16:29
    adamas_nt
    Moderator Programowanie

    Warunek w procedurze już jest, więc wystarczy zamiast Exit Sub dopisać wstawianie wiersza (nagraj rejestratorem) oraz z lekka skorygować resztę.

    Przyjmij zasadę "Od procedur są moduły i koniec", stąd moja uwaga o kropkach w argumentach Range ;)
    W kodzie arkusza zapisuje się procedury zdarzeniowe i makra kontrolek umieszczonych w arkuszu, lub jeszcze lepiej tylko ich wywołanie (a makra w modułach).

    0
  • #7 30 Kwi 2013 10:00
    bartezzzz
    Poziom 6  

    nagrałem dodawanie wiersza i wstawiłem w po else w miejsce exit sub
    ale tutaj zdaje się powinienem wstawić warunek sprawdzający tabelę z ofertą taki, że jeśli tabela nie ma pustych wierszy to wówczas na końcu dostawia nowy wiersz.
    Po nagraniu rejestratorem otrzymałem taki kod:

    Kod: vb
    Zaloguj się, aby zobaczyć kod




    Czy dodatkowe funkcje wpisywać w kolejnych modułach i w poszczególnych procedurach dawać odwołania do innego modułu ?

    Dodano po 8 [minuty]:

    Jeszcze pytanie:

    w kodzie, który mi podesłałeś miałem przypisane kopiowanie z arkusza już od wiersza 1 czyli do pierwszego wiersza w ofercie wstawiał mi nagłówki. Staram się tez zrozumieć działanie kodu aby móc go modyfikować - czy mógłbyś mi podpowiedzieć za co odpowiadają zaznaczone wiersze?


    Kod: vb
    Zaloguj się, aby zobaczyć kod



    Kiedy zmieniłem linijkę
    If wsDst > 4 Then Exit Sub na

    If wsDst > 19 Then Exit Sub

    wówczas kod nie informował mnie o tym, że Formularz jest pełen i czy go wyczyścić

    0
  • #8 02 Maj 2013 19:10
    adamas_nt
    Moderator Programowanie

    Pisałem, żebyś przeanalizował. Zwykle polega to na przejściu kodu krok po kroku (klawisz F8). W przypadku wieloelementowej pętli możesz wpisać za nią polecenie Stop lub umieścić zakładkę (klawisz F9)

    Ustawienie kursora "nad" zmienną w czasie wykonywania kodu, pokaże jej aktualną wartość.
    VBA - Jak przypisać kilka czynności do jednej pozycji z ComboBOX w Excel VBA

    Czasem niezbędne jest wysłanie wartości zmiennej (zwykle w pętli) do okna immediate (Ctrl+G) poleceniem Debug.Print wyrażenie.

    Po wykonaniu powyższego 9/10 pytań będzie nieaktualne ;)

    P.S. Kodu wygenerowanego przez rejestrator nie można brać tak "dosłownie". VBA "pokaże" Ci tylko jakich poleceń/funkcji używa. Argumenty trzeba podstawić wg. potrzeb. Najczęściej kod jest zdecydowanie nadmiarowy i wymaga "posprzątania".

    0
TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo