Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Excell] data w listbox user form zmienia format

Na bakier z excelem 05 Jun 2018 20:28 1092 15
  • #1
    Na bakier z excelem
    Level 6  
    W momencie wyszukiwania w UserForm Daty w Listbox konwertuja sie do amerykanskiej daty. Jak mozna temu zaradzic? Uzywam dwoch wersji Excela 2010 angielskiej w pracy i Polskiej w domu, na obu data ustawiona jest w formacie "dd/mm/rrrr", przeszukalem juz wujka googla ale niestety nie moge ogarnac tematu. Bede wdzieczny za wszelka pomoc.
  • #2
    adamas_nt
    Moderator of Programming
    Spróbuj
    Me.ListBox1.AddItem Format(Sheet1.Cells(i, 1).Value, "Short Date")
  • #4
    lanzul
    Level 30  
    Na bakier z excelem wrote:
    W momencie wyszukiwania w UserForm Daty w Listbox

    Pomijając kwestię wyszukiwania samej daty (odpowiedź już padła dwa razy), to:

    1. Co to jest "myDate" ?
    Pojawia się w deklaracji, a potem od razu w funkcji "Format", nie ma żadnego przypisania, a więc tylko wartość "żadną" - "Me.ListBox1 = Format(myDate, "dd/mm/yyyy")"

    2. Po co kasować pole listy poza warunkiem "If TextBox3.Value <> "" Then" ?
    Przecież lista zostanie wykasowana za każdym razem, czy jest taka potrzeba czy nie ma, takie było założenie ?

    3. Po co za każdym razem, w pętli "For x = 1 To 2", wyliczać "A = Len(Me.TextBox3.Value)" ?
    Długość pola TextBox3 jest ściśle określona od samego początku zdarzenia dwukliku, po co wyliczać to co jest stałe i z góry znane ?

    4. Po co wyliczać, to co wyżej, dla x = 2, skoro jest tam tylko jakaś litera, która nigdy nie będzie mieć długości ciągu daty ?

    5. Po co testować warunek "And Me.TextBox3.Value <> "" Then" w pętli "For x = 1 To 2" skoro wejście do tej pętli (i nie tylko) jest warunkowane przez "If TextBox3.Value <> "" Then" ?

    6. Po co właściwie jest pętla "For c = 1 To 2" ?
    Dla c = 2 dodawane są "wartości" z nieistniejącej, w przykładowym pliku, kolumny nr 3

    7. Po co właściwie jest "On Error Resume Next" ?

    8. Po co tak się "męczyć" z pętlami, jeśli można zastosować funkcję "Find" ?
    Np.:
    Code: text
    Log in, to see the code
  • #5
    Na bakier z excelem
    Level 6  
    Dziekuje bardzo za wszelkie porady na pewno je przeanalizuje, a jak moge poradzic sobie z datami w zalaczonym listbox.

    Jeszcze raz dzieki za okazana pomoc
  • #6
    lanzul
    Level 30  
    Zależy w jakim kontekście.
    Jeśli chodzi ci tylko o wyszukanie danej daty, to najprościej: Find, Do...Loop, itd.
    Natomiast, jeśli chciałbyś następnie użyć "położenia" daty jako koordynaty dla pozyskania danych z innych kmórek, to bardzo "pożyteczna" byłaby funkcja "Match", którą można by użyć w konstrukcji:
    "Cells(wiersz, kolumna).Value"
    , gdzie wiersz lub kolumna pobierałyby wartość z funkcji "Match".
  • #7
    Na bakier z excelem
    Level 6  
    Wszystko wyszukuje mi wlasciwie problemem jest to ze data wyswietlana w listbox jest w amerykanskim formacie
  • #8
    Na bakier z excelem
    Level 6  
    Ktos cos?
    Nie mam pojecia jak to ogarnac
  • #9
    Prot
    Level 38  
    Na bakier z excelem wrote:
    Nie mam pojecia jak to ogarnac

    Miałeś już 3 podpowiedzi rozwiązań Twojego problemu :ok:
    Które rozwiązania wypróbowałeś :?: I z którymi masz problem ?
    W moim rozwiązaniu - bez względu jak wpiszesz (tj. z jakim formatowaniem numerycznym daty) datę w Box3 - zawsze listuje z narzuconym w kodzie "polskim" formatowaniem :D (co najwyżej zmienia znaki interpunkcyjne na systemowe :cry: ).
    [Excell] data w listbox user form zmienia format2018-06...png Download (49.63 kB)
  • Helpful post
    #10
    lanzul
    Level 30  
    Na bakier z excelem wrote:
    problemem jest to ze data wyswietlana w listbox jest w amerykanskim formacie

    Bez obrazy, ale stwierdzam, że "leń patentowany" jesteś ... :-) ...
    "Rozwiązanie" masz pod nosem i sam się w pewnym sensie nim posługiwałeś.
    Właściwość "List" ... dlaczego nie sprawdziłeś składni tej właściwości ?
    "object.List(row, column) [= Variant]"
    Gdybyś zerknął w pomoc podręczną, od razu byś wiedział co robić ... :-) ... rozwiązanie samo się nasuwa.
    Code: text
    Log in, to see the code

    Dwuklik tu niepotrzebny, wystarczy zdarzenie przy opuszczaniu pola tekstowego klawiszem tabulacji.
    Book3.zip Download (36.03 kB)
  • #11
    Na bakier z excelem
    Level 6  
    Dziekuje bardzo wszystkim za wskazowki,
    Prot Doszlo do malego nieporozumienia, jesli chodzi o zalacznik book1 I wskazowke od adams_nt wszystko bylo jasne I zrozumiale problemem byl zalacznik book3 z ktorym pomohl mi lanzul za co powinienem postawic mu przynajmniej browarka :)

    Mam do was Panowie jeszcze jedna prosbe gdybyscie mogli mi powiedziec jak rozwiazac problem z data w zalaczonym pliku (znowu niestety chodzi o date w listbox) probowalem juz nascie godzin I nic mi nie wychodzi (I tu mozesz mi wierzyc lanzu ze leniem na pewno nie jestem, po prostu ucze sie tego wszystkiego I czesto gesto nie wiem nawet jakie powinienem zadac pytanie)

    Jeszcze raz dzieki bardzo I prosze o jeszcze troche waszej wiedzy

    Pozdrawiam
  • #12
    Na bakier z excelem
    Level 6  
    Panowie, poradzcie coś.
    Spędziłem przy tym pliku już dziesiąt godzin i nic, gdyby data była w pierwszej kolumnie skorzystał bym z rozwiązania adams_nt, ale niestety data jest w dziesiątej kolumnie i nie wazne jak zapiszę kod to albo wyszukiwanie przestaje mi działać, albo dalej pokazuje datę amerykańską.
    Dzięki za zrozumienie i wszelką pomoc
    Pozdrawiam
  • #13
    Prot
    Level 38  
    Na bakier z excelem wrote:
    wyszukiwanie przestaje mi działać, albo dalej pokazuje datę amerykańską.
    :?: :?: :?:
    A czy mógłbyś kolego pokazać zrzut - jak działa ten Twój formularz :?: No zwłaszcza z tą datą amerykańską :cunning:
    W mojej ocenie ten formularz wyszukuje całe "rekordy", a tym samym nie możesz właściwie formatować pojedyńczego pola tego rekordu - daty :not:
    W Twoim pliku Book4.xlsm znajduje formularz zaprojektowany na dwie szerokości ekranu :cry: , w którym umieściłeś 10 kolumnowy listbox :!:
    Jeśli rzeczywiście potrzebujesz tyle informacji - to proponuje zrobić nowy projekt formularza z pojedyńczymi (1 kolumnowymi) listboxami - i dopiero jak wszystkie zaczną Ci prawidłowo działać - zgodnie z założeniami - próbuj je połączyć :idea: :idea:
  • Helpful post
    #14
    adamas_nt
    Moderator of Programming
    Spróbuj w 'Private Sub TextBox_Historia_klienta_Exit' dopisać na końcu (przed End If)
    Code: vbscript
    Log in, to see the code
    i co tam teraz widać?

    Bo u mnie:

    [Excell] data w listbox user form zmienia format

    tak mam ustawiony format daty w OS.
  • #15
    Na bakier z excelem
    Level 6  
    Jeszcze raz dzięki bardzo za pomoc, w międzyczasie dodałem taką część kodu i pięknie wszystko pokazuje,

    If Me.Label1_Historia_klienta.Caption = "Imie i Nazwisko" Then
    For i = 2 To Application.WorksheetFunction.CountA(Sheet1.Range("A:A"))
    A = Len(Me.TextBox_Historia_klienta.Text)
    If Left(Sheet1.Cells(i, 4).Value, A) = Me.TextBox_Historia_klienta.Text And Me.TextBox_Historia_klienta.Text <> "" Then
    Me.ListBox2_Historia_klienta.AddItem Sheet1.Cells(i, 2).Value
    For c = 1 To 12
    Me.ListBox2_Historia_klienta.List(ListBox2_Historia_klienta.ListCount - 1, c) = Sheet1.Cells(i, c + 2).Value
    Me.ListBox2_Historia_klienta.List(ListBox2_Historia_klienta.ListCount - 1, 8) = Format(Sheet1.Cells(i, 10).Value, "dd/mm/yyyy") - to dodałem
    Next c
    End If
    Next i

    Pozdrawiam
  • #16
    lanzul
    Level 30  
    Uwagi:
    1. Nie ustawiaj na sztywno w projekcie formatki, to co potem ustawiasz programowo - ilość kolumn "ListBox2"

    2. Czytaj składnię poleceń/obiektów i ich ograniczenia - maksymalna liczba kolumn w "ListBox" to 10, a w pętli próbujesz ustawić wartości dla 13 kolumn:
    Code: text
    Log in, to see the code

    3. W części "Data" używasz przedziwnych sprawdzeń
    Code: text
    Log in, to see the code

    Po co porównujesz daty tekstowo, konwertując datę z komórki przy pomocy "Left()", jak masz "CStr()" ?
    Poza tym już lepiej jeden raz skonwertować wartość tekstową daty z "TextBox", niż robić to z każdym obrotem pętli dla komórek.
    Do tego za każdym razem testujesz, czy "TextBox" nie jest puste, to wystarczy zrobić tylko raz, na początku procedury, to się nie zmienia w trakcie wykonywania procedury.
    Dodatkowo wyliczasz to jakieś "A", w każdym obrocie pętli, mimo że to ma z góry określoną i stałą wartość. To się robi poza pętlą.

    4. Musisz częściej używać "F8" do sprawdzania wykonywania kodu, unikniesz wielu niepotrzebnie wykonywanych czynności, jak chociażby czyszczenie listy:
    Code: text
    Log in, to see the code

    za każdym razem, czy jest taka potrzeba, czy jej nie ma.

    Poza tym, osobiście wybrałbym inną procedurę zdarzeniową do tego (wydaje się być mniej komplikującą inne procesy), np. według tego schematu jak poniżej:
    Code: text
    Log in, to see the code

    Book4.zip Download (36.55 kB)
    Po wpisaniu daty w "TextBox" klikasz pole "Data" w "ListBox1", zwrotnie do pola "TextBox" wracasz klawiszem tabulacji, co powoduje zaznaczenie całego, starego wpisu w "TextBox" i możesz od razu wpisywać nową datę bez bawienia się w zaznaczanie starej daty, względnie jej usuwanie, przed podaniem nowej.