Cytat:Z tak ładnie napisanym kodem trudno będzie konkurować. Pozostaje tylko wykorzystać maksymalne uproszczenie kodu.
Moja propozycja: Private Sub UserForm_Initialize()
With Sheets("arkusz2")
ComboBox1.List = .Range(.Cells(2, 2), .Cells(Rows.Count, 2).End(xlUp)).Value
ComboBox1.Value = ComboBox1.ListCount
End With
End Sub
Treborze,
Twój kod jest piękny, zwarty i zachwyca.
Oczywiście "myk" w metodą End jest mi znany, ale nigdy nie wpadłem na to by użyć argumentu xlUp, czyli szukanie ostatniego wiersza z danymi od dołu, czyli od ostatniego wiersza. Sprytnie
Zawsze używałem xlDown, czyli szukałem w dół, ale... w przypadku tylko jednego wiersza z danymi albo braku danych miałem Comboboxa z 65 tysiącami pustych pozycji. Oczywiście można to oprogramować. W sumie doprowadziło mnie do wniosku, że przedstawiona przeze mnie funkcja będzie najprostsza z możliwych, choć amatorsko wyglądająca. Myliłem się, twoja propozycja jest znacznie lepsza.
Nie wiem tylko dlaczego wpisujesz liczb wierszy jako wartość Comboboksa:
ComboBox1.Value = ComboBox1.ListCount
Odniesienie się do liczby wierszy aktywnego arkusza jest równie dobre, jak do liczby wierszy arkusza2:
ComboBox1.List = .Range(.Cells(2, 2), .Cells(.Rows.Count, 2).End(xlUp)).Value
Siedzę na Twym kodem, podziwiam i douczam się.
Niemniej pozwolę sobie na małe poprawki:
Private Sub UserForm_Initialize()
With Sheets("arkusz2")
ComboBox1.List = .Range(.Cells(2, 2), .Cells(.Rows.Count, 2).End(xlUp)).Value
ComboBox1.ListIndex= ComboBox1.ListCount - 1
End With
End Sub |