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.

VBA Excel - wartość z textboxa definiuje listę do comboboxa oraz różnica dat

29 Lip 2015 08:34 1893 19
  • Poziom 6  
    Witam,

    Od jakiegoś czasu staram się posługiwać VB, z jakimś nienajgorszym skutkiem jednak z rzeczami trudniejszymi gorzej:).

    Czy można powiązać ze sobą :

    1. Wartość z textboxa ze definiowaniem listy do comboboxa? CHodzi mi o to że
    w textboxie pojawia mi się miasto i wg tego miasta w comboboxie miała by się pojawić odpowiednia lista klientów.

    2. Jak obliczyć różnicę dat podanych w textboxach w userformie oraz zwrócenie
    różnicy w miesiącach w kolejnym textboxie??

    3. Jak zrobić vlookupa między wartością wpisaną do jednego textboxa, oraz nazwą jaka miała by się odrazu pojawić po wpisaniu w innym texboxie. Chodzi mi o to że w jednym podaję numer części a w textboxie obok wyskakuje mi jego nazwa. dodam że mam takich ponad 35000..

    Dzięki wielkie z góry za każdą pomoc.!
  • Moderator Programowanie
    Ad.1 Czyścić i dodawać pasujące (odświeżyć) dane do listy ComboBox'a przy zdarzeniu Exit TextBox'a

    Ad.2 To zależy jak to ma być przedstawione. Np pomiędzy datami: 1-07-2015 i 30-06-2015 ile jest różnicy? 0, 1, czy może 0,03?

    Ad.3 WorksheetFunction.VlookUp(tu argumenty jak w arkuszowej), Range().Find, lub w klasycznej pętli.
  • Poziom 6  
    Ad1). Poradziłem sobie dodając poprostu listy w osobnym arkuszu oraz wykorzystaniem
    If Me.TextBox2 = "GDAŃSK" Then
    Me.ComboBox4.RowSource = "USTAWIENIA!J2:J50"
    End If

    Działa.

    Ad2) jeśli chodzi o różnicę dat to w obu textboxach mają być wpisane w formacie RRRR-MM-DD, i tak np chciałbym uzyskać ilość miesięcy między obiema datami..
    Nie mogę sobie z tym poradzić. a jeśli chodzi o wynik. załóżmy 0,3, W arkuszu zawsze mogę ustawić zmienić zaokrąglenie do pełnych cyfr jeśli będę chciał robić zestawienia po jakim czasie coś się stało.

    Ad3) uzyłem tego kodu ale coś nie działa...
    Me.ComboBox5.RowSource = "CZESCI!A:A"

    Me.TextBox14.Value = ""
    On Error Resume Next
    Me.TextBox14.Value = Application.WorksheetFunction.VLookup(ComboBox5.Value, Sheets("CZESCI").Range("A1:B5000"), 2, False)
    On Error GoTo 0



    W COmboboxie pojawiają się numery po wpisaniu pierwszej cyfry.. ale w texboxie nie pojawiają się za to przypisane im w kolumnie obok nazwy..

    Docenię pomoc w stworzeniu kodu do dat jak i podpowiedzi co jest źle że nie wypluwa mi nazwy części.
  • Moderator Programowanie
    Załącz plik z jakimś przykładem (>v2003 należy spakować ZIP, RAR), ułatwisz sprawę ew pomagierom.
  • Poziom 6  
    Ok załączam plik tak to wygląda


    dodam że udało mi się jakoś na zrobić obliczanie m-cy..
    tylko nie wiem na ile jest to prawidłowe. Jakoś działa..

    EKSPLATACJA = DateDiff("d", CDate(TextBox5.Text), CDate(TextBox6.Text)) / (-30)

    jak zrobić tylko aby to mi się tego wynik pojawił w textboxie po wpisaniu dat w dwóch innych?
  • Pomocny post
    Moderator Programowanie
    Formułkę (różnica dat) wpisałem do kodu zdarzenia 'Exit' obu TextBox'ów.
    Oprogramowałem ComboBox_Change, wykorzystując jego ListIndex. Numer>Opis.
    Zmienną 'ostW' w 'Initialize' można wykorzystać wielokrotnie (tworzenie list)

    Ciut komplikujesz proste rzeczy, moim zdaniem ;)
  • Poziom 6  
    Wow! dzięki! o to mi chodziło! uczę się dlatego tak to wygląda jak się robi na czuja :) :D
  • Poziom 6  
    W dalszej części zmagań nie mogę wstawić mnożenia wartości textboxów...
    Na początku jak zrobiłem dla 1 linii było ok. Ale jak dodałem kolejne.. to już nie mnożyło...
    dlaczego?

    połączam ponownie plik.
  • Moderator Programowanie
    Pola sum, po mojemu, nie powinny być "edytowalne".

    Zamieniłem i ciut rozbudowałem procedurę "MyCalc" na jednoargumentową funkcję. Powinno być OK.

    P.S. Zauważ, jak ułatwia pracę nazywanie "po ludzku" kontrolek ;)
  • Poziom 6  
    bezpośrednio po odpaleniu i wybiorze jakiejś części z listy compile error:method or data member not found
  • Pomocny post
    Moderator Programowanie
    Hmm, zapomniałem o pierwszej stronie...
    Zmiana koncepcji w takim razie.

    Edit 13:30 - Och, ilość też wpisujesz w 'Page0'. Załącznik podmieniłem.
  • Poziom 6  
    Jest git, jest hit :) dzięki wielkie jeszcze raz :)
  • Poziom 6  
    Cześć,

    jednak w miarę upływu czasu i obchodzenia się z tą bazą zauważyłem kilka problemów z którymi nie mogę się uporać..

    mianowicie:
    1. po wstawieniu kolejnych wpisów w bazę krzaczą mi się wartości materiałów.. VBA Excel - wartość z textboxa definiuje listę do comboboxa oraz różnica dat

    2. wstawiłem normalnie formatowanie warunkowe, które niestety podkreśla mi 5 linijek(tyle mam części do wstawienia ewentualnego) mimo iż wartości są poniżej 500;/

    3. Nie wiem jak zrobić indywidualne numerowanie tj. dla wklepanego raportu z danego miesiaca aby go nazywać kolejno numer roku (15),miesiąc (09), i numer kolejny raportu dla danego miesiąca (np10) czyli 150910. Tak samo samo numerowanie że dla danego miesiąca to będzie kolejny raport. problem jest gdy mamy np juz wpisywane raporty z września i nagle dostane i mam wpisać raport z sierpnia i chciałbym aby miał kolejną liczbe porządkowa z sierpnia a nie jako 1.
  • Poziom 6  
    Proszę o pomoc w związku z powyższym :(
  • Moderator Programowanie
    Opisz jakoś dokładniej. Może zostaw w arkuszu te wiersze, które najlepiej odzwierciedlają problem. Nie wiem, czy tylko jak tak mam, ale jakość nie mogę "zatrybić" :(
  • Poziom 6  
    Weź przemnóż wartości z komórek Q*R aby wynik był w komórce S, przeklej to jako wartości. A następnie odpal userforma i spróbuj zarejestrować coś i wróć do tych danych z początku tabeli

    Chodzi o to że nie wiem dlaczego ale na początku tabeli wywala mi równanie z kosmosu...

    1 * 1158,57 = 115856511,00 ?!
  • Poziom 6  
    Ok postaram się jeszcze raz opisać o co mi dokładnie chodzi rozpisując się :).

    1.Jak zrobić numerowanie LP w m-cu (kolumna B) aby kolejne reklamacje w mcu miały swój konkretny numer np w sierpniu 1,2,3,4...19...itd, potem rejestruje wrzesieńi odliczanie zaczyna się od nowa, JEDNAK jest jeszcze sytuacja że muszę zarejestrować reklamację z poprzedniego miesiąca i tu się pojawia zonk.. bo wtedy jak wprowadzę znowu reklamację wykonaną w sierpniu to zacznie mi ją liczyć od 1.... Dodatkowo kolejne utrudnienie, kiedy wprowadzam 5 części żeby nie liczyło mi tego jako 5 reklamacji w mcu tylko jako 1 i żeby miało ten sam numer przypisany :)

    2. Numer ID (kolumna C), chciałem aby to był numer składający się z RRMM & Lp w mcu.

    z resztą problemów jakoś się uporałem kasując niepotrzebny fragment kodu, który był sprawcą zamieszania :)

    Mam nadzieję że tym razem dokładniej opisałem co na sercu leży z tym plikiem.
    Mam nadzieję że jakiś dobry człowiek potrafi mi pomóc :cry:
  • Poziom 6  
    Minął miesiąc a ja dalej nie potrafię sobie poradzić z tym problemem:( Może koś ma jakiś pomysł?

    Dodano po 1 [sekundy]:

    Minął miesiąc a ja dalej nie potrafię sobie poradzić z tym problemem:( Może koś ma jakiś pomysł?
  • Poziom 6  
    dziękuję ale szukałem pomocy w kodzie vba a nie gotowym rozwiązaniu w postaci systemu erp.

    Sam sobie poradziłem

    Dim x As Long
    x = Range("AH" & Rows.Count).End(xlUp).Row
    If x < 1 Then x = 0
    ActiveCell.Offset(0, 1) = Application.WorksheetFunction.CountIf(Range("AH3:AH" & x), ActiveCell.Offset(0, 33))