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

[excel vba] wartość z comboBox zapisywana w szablonie

11 Lip 2012 21:42 3720 6
  • Poziom 8  
    Witam!

    Mam problem tego typu. Postanowiłem dodać parę opcji do załączonego pliku i zadanie mnie przerosło. W początkowej formie, arkusz służył do wprowadzania numerów paczek zeskanowanych skanerem z listu przewozowego.

    Założenia arkusza:
    1. Po kliknięciu w przycisk: Wprowadzanie nr przesyłek, w wyświetlonym UserForm domyślne kursor znajduje się w polu: Wprowadź nr przesyłki
    2. Po wprowadzeniu nr przesyłki (skanerem bądź ręcznie) zatwierdzamy Enterem.
    3. Przed wprowadzeniem pierwszego numeru należy wypełnić niezbędne pola wyboru.
    4. Po wypełnieniu ostatniego pola i zatwierdzeniu Enterem kursor powinien przeskoczyć do pierwszego pola "Wprowadź nr przesyłki".
    5. Po wprowadzeniu numeru i zatwierdzeniu Enterem dane z formularza powinny zapisać się w dowolnym arkuszu w przypisanych miejscach.
    6. W polach comboBox powinny wyświetlać się domyślne opcje które można ustawić w oddzielnym arkuszu.
    7. Super rozwiązaniem było by wprowadzenie unikalnego kodu np: qwerty, w polu wprowadzania przesyłek który zmieniał by domyślne opcje na wcześniej ustalone i nie dodawał by tego kodu do spisu zeskanowanych przesyłek.

    Pierwsze 3 pkt. są ok. Od 4 mam problem.
    Bardzo proszę o pomoc.
    Pozdrawiam
  • Moderator Programowanie
    1. Zablokowałbym to pole dopóki pozostałe wymagane pola nie zostaną wypełnione.
    2. Od tego jest zdarzenie 'Exit' kontrolki (jeśli ktoś uparcie, jak ja ;) używa zwykle tabulatora?).
    3. Patrz pkt.1
    4. A które to "ostatnie pole"? Można wymuszać kolejność przechodzenia (focus) przy 'Exit', ustalić kolejność tabulatora..
    5. Nie rozumiem pojęcia "dowolny arkusz". Zawsze to "jakiś" arkusz (aktywny, po indeksie, nazwie)
    6. Realizujesz to przy 'Form_Initialize' (listindex), lub wypełniając pole 'Value' w oknie właściwości.
    7. A w czym problem? Wystarczy instrukcja warunkowa.
  • Poziom 8  
    W TextBox1 stworzyłem taki kod:
    Private Sub TextBox1_Change()
    Dim tekst As String
    TextBox1.SelLength = TextBox1.TextLength
    tekst = TextBox1.Value
    Cells(1, 1) = tekst
    End Sub
    Jest to wersja robocza, tzn docelowo wartość z TextBoxa zapisywana będzie do innego arkusza z danymi. I tu mam zagwozdkę. Wartość w komórce (1,1) pojawia w trakcie wpisywania danych. Chciałbym aby wartość z TextBoxa1 i TextBox2 umieszczana była w arkuszu dopiero po wprowadzeniu numeru przesyłki w polu "init" i zatwierdzeniu Enterem.

    Proszę o pomoc.
  • Moderator Programowanie
    Skoro przy każdej zmianie zapisujesz do komórki...
    Już pisałem, najwłaściwsze do tego jest zdarzenie 'Exit' (opuszczenie pola) i tu nie gra roli czy za pomocą klawisza [Enter], [Tab], czy kliknięcie w inne myszą... No i wystarczy jedna linijka: 'Cells(1, 1) =TextBox1.Value' ew. '=TextBox1.Text'
  • Poziom 8  
    Dzięki za odpowiedz. Arkusz mam prawie gotowy.

    Niestety nie umiałem zastosować zdarzenia Exit. Głowię się i nic nie wychodzi.
    Zostały dwie sprawy do zrobienia:
    1. Po wprowadzeniu unikalnego numeru w postaci np: qwerty1 w oknie UserForm
    - formularz uzupełniał by się domyślnymi wartościami dla tego zdarzenia np.
    w polu "rodzaj uszkodzenia" zaznaczała by się opcja nr3, w polu "czynności zabezpieczające" zaznaczała by się pierwsza pozycja itd.
    Przy kolejnym unikalnym numerze np: qwerty2
    - formularz uzupełniał by się innymi wartościami niż w przypadku pierwszym itd.
    - przy wprowadzeniu numeru qwerty0 formularz czyścił by się ze wszystkich wartości.
    -dopiero wprowadzenie numeru przesyłki w pole "Wprowadź nr przesyłki" przenosiło by dane z formularza i zapisywało w arkuszu "Zestawienie przesyłek"
    pozostawiając wprowadzone wcześniej wartości w formularzu.

    2. Po zamknięciu UserForm i kliknięciu w przycisk "Wypełnij", dane z arkusza "Zestawienie przesyłek" wypełniały by się w szablonie w arkuszu "Opis szkody".
    W ilości takiej ile jest wprowadzonych przesyłek w arkuszu "Zestawienie przesyłek".

    Niestety sam tego nie przeskoczę.
    Proszę o pomoc.
  • Moderator Programowanie
    Umieściłeś kontrolki w ramkach. Wg. mnie nie zawsze to jest wygodne. Zmieniłem trochę formularz i zamiast lewej/górnej ramki wstawiłem etykiety. Na "oko" podobnie, za to łatwiej oprogramować zdarzenie 'Exit' pola. Np wpisz swój tajny kod: "qwerty1", lub spróbuj z pustymi polami kombi...

    W przypadku pól opcji, to w ramce łatwiej sprawdzić które jest aktywne (zaznaczone). Każde ma swój indeks (nazwę oczywiście również), do którego można się odwołać. Zamiast wielu instrukcji 'If-Else' można zastosować jedną 'Select Case'.

    Reszta w załączniku.
  • Poziom 8  
    W końcu uporałem się z problemami z punktu pierwszego i dostosowałem do własnych potrzeb.
    Pozostał punkt drugi czyli :
    Po zamknięciu UserForm i kliknięciu w przycisk "Wypełnij", dane z arkusza "Zestawienie przesyłek" wypełniały by się w szablonie w arkuszu "Opis szkody".
    W ilości takiej ile jest wprowadzonych przesyłek w arkuszu "Zestawienie przesyłek".

    Ma ktoś jakiś pomysł? Co w tym wypadku można zastosować?