Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
ID tematu: 64417 Skopiuj do schowka Sortowanie danych w listboxie po dacie
Autor Wiadomość
kszlachcic 
Starszy Forumowicz


Posty: 31
Wysłany: 13-03-2019, 15:03   Sortowanie danych w listboxie po dacie

Cześć wszystkim,

mam problem z sortowaniem wstawianych danych do listboxa po dacie.

W userform mam dwa textboxy z danymi (data w formacie mm-yyyy oraz kwota), przycisk wstaw dane oraz poniżej Listboxa.

Po kliknięciu przycisku dane wstawiają się do Listbox i od razu sortują się rosnąco po datach, tych wstawianych z textboxa.

Problem w tym, że sortowanie działa tylko w obrębie jednego roku, czyli dobrze ustawi mi datę 04-2019 przed datą 05-2019, ale już datę 03-2020 ustawia mi przed datą 04-2019.

Domyślam się, że jest to kwestia z określeniem formatów danych, ale nie udaje mi się tego ogarnąć.

W załączniku przesyłam plik, a poniżej kod.

Pomożecie?


Kod:


Private Sub CommandButton1_Click()

'dodawanie do listboxa
With ListBox1
.ColumnCount = 3
.AddItem
.List(ListBox1.ListCount - 1, 2) = ListBox1.ListCount
.List(ListBox1.ListCount - 1, 1) = TextBox1.Value
.List(ListBox1.ListCount - 1, 0) = TextBox2.Value
End With


'sortowanie transz
Dim i As Long
    Dim j As Long
    Dim sTemp As String
    Dim sTemp2 As String
    Dim LbList As Variant
   
    LbList = Me.ListBox1.List
   
    For i = LBound(LbList, 1) To UBound(LbList, 1) - 1
        For j = i + 1 To UBound(LbList, 1)
            If LbList(i, 0) > LbList(j, 0) Then
                sTemp = LbList(i, 0)
                LbList(i, 0) = LbList(j, 0)
                LbList(j, 0) = sTemp
               
                sTemp2 = LbList(i, 1)
                LbList(i, 1) = LbList(j, 1)
                LbList(j, 1) = sTemp2
            End If
        Next j
    Next i
   
    Me.ListBox1.Clear
   
    Me.ListBox1.List = LbList

TextBox1.Value = ""
TextBox2.Value = ""

End Sub


Sortowanie listboxa.xlsx.xlsm
Pobierz Plik ściągnięto 7 raz(y) 18.67 KB

ID posta: 364126 Skopiuj do schowka
 
 
J_B 
Excel Expert


Pomógł: 260 razy
Posty: 752
Wysłany: 13-03-2019, 15:17   

Wprowadzaj data w formacie yyyy-mm i będzie ok
ID posta: 364129 Skopiuj do schowka
 
 
Tajan


Pomógł: 4285 razy
Posty: 9521
Wysłany: 13-03-2019, 15:29   

Można też zmienić linię:
Kod:
If LbList(i, 0) > LbList(j, 0) Then 
na
Kod:
If DateValue(LbList(i, 0)) > DateValue(LbList(j, 0)) Then
i również powinno działać.
  
ID posta: 364132 Skopiuj do schowka
 
 
kszlachcic 
Starszy Forumowicz


Posty: 31
Wysłany: 13-03-2019, 15:32   

heheh, masz rację :D

Tylko pytanie, czy nie dało by się jednak zastosować jakiegoś formatu daty, tak by np. osoba wprowadzające dane przy wpisaniu daty np. 2019-20 dostała komunika, że data błędna?
ID posta: 364133 Skopiuj do schowka
 
 
kszlachcic 
Starszy Forumowicz


Posty: 31
Wysłany: 13-03-2019, 15:42   

Tajan napisał/a:
Można też zmienić linię:
Kod:
If LbList(i, 0) > LbList(j, 0) Then 
na
Kod:
If DateValue(LbList(i, 0)) > DateValue(LbList(j, 0)) Then
i również powinno działać.



Dzięki Trajan, przy Twoim rozwiązaniu wywala błąd przy wpisaniu błędnej daty, więc po prostu podepnę komunikat o błędnej wpisanej dacie i wszystko będzie działało.

Dzięki wielkie :)
ID posta: 364135 Skopiuj do schowka
 
 
Tajan


Pomógł: 4285 razy
Posty: 9521
Wysłany: 13-03-2019, 15:44   

Dodaj na początku makra obsługi dodawania danych kod:
Kod:
If Not TextBox1.Value Like "##-####" Then
   MsgBox "Wpisz datę w formacie mm-rrrr!"
   Exit Sub
End If

Oczywiście przydałoby się jeszcze sprawdzenie wartości liczbowych, czyli np. czy miesiąc nie większy od 12 a rok ... to już wg indywidualnych potrzeb :-)
  
ID posta: 364136 Skopiuj do schowka
 
 
J_B 
Excel Expert


Pomógł: 260 razy
Posty: 752
Wysłany: 13-03-2019, 15:55   

Gwarancją wprowadzenia poprawnych wpisów jest zastosowanie
jednej z kontrolek DTPicker MonthView lub kalendarza
Tak mi się wydaje że w tym celu zostały stworzone
  
ID posta: 364138 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.marketingNET.pl

Archiwum

Strona używa plików cookies.

Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przeglądarce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
Sprawdź, w jaki sposób przetwarzamy dane osobowe