vbamania.pl
login:
hasło:
 
  *Rejestracja *Zapomniane hasło
 Dziś jest niedziela, 28 kwietnia 2024 roku.
Ustaw jako stronę startową Ulubione Napisz
PowrótPowrót do serwisu  RegulaminRegulamin rssRSS

  tytuł wątku:
Wątki dyskusji

Wypełnienie combobox'a zmiennym zakresem z nieaktywnego arkusza


otwartyotwarty rozpoczął: kociol_83 postów: 5



napisał: Trebor
postów: 1209


umieszczony:
12 maja 2012
15:50

edytowany:
12 maja 2012
15:52

  
Cytat:
Nie wiem tylko dlaczego wpisujesz liczb wierszy jako wartość Comboboksa:

Autor wątku prosił "oraz by zliczył jako zmienną ilość tych komórek", więc zamiast osobnej zmiennej zastosowałem taki pokaz liczby komórek
napisał: admin
postów: 613


umieszczony:
12 maja 2012
10:45

  
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

napisał: Trebor
postów: 1209


umieszczony:
11 maja 2012
20:07

edytowany:
11 maja 2012
20:12

  
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

napisał: admin
postów: 613


umieszczony:
11 maja 2012
15:21

edytowany:
11 maja 2012
15:31

  
nazwa pliku rozmiar
Zeszyt1.xls 36.00 kB

Witam,

Oto moja propozycja:
Option Explicit

Function GetStopCell(oWks As Worksheet, lngColumn As Long, lngStart As Long) As Long

If oWks.Cells(lngStart, lngColumn).Value = "" Then GetStopCell = -1: Exit Function
 
Dim i As Long: i = lngStart

Do While oWks.Cells(i + 1, lngColumn).Value <> ""
    i = i + 1
Loop

GetStopCell = i

End Function


Private Sub UserForm_Activate()

'Program glowny

Dim i As Long
Dim l_StopRow As Long
Dim oWk As Worksheet
Const l_StartRow As Long = 2 'Wiersz poczatkowy
Const l_Column As Long = 2 'Kolumna

'okreslenie arkusza
Set oWk = ThisWorkbook.Worksheets("Arkusz2")
'znalezienie ostatniego wiersza
l_StopRow = GetStopCell(oWk, l_Column, l_StartRow)
'Jesli nie ma danych w arkuszu koniec programu
If l_StopRow = -1 Then MsgBox "Brak danych": Exit Sub

'wypelnienie comboboksa
For i = l_StartRow To l_StopRow
    Me.ComboBox1.AddItem oWk.Cells(i, l_Column).Value
Next i

Set oWk = Nothing

napisał: kociol_83
postów: 1


umieszczony:
11 maja 2012
14:40

  
nazwa pliku rozmiar
Zeszyt1.xls 24.50 kB

Witam

Mam problem, muszę wypełnienie combobox'a zmiennym zakresem z nieaktywnego arkusza, jak w załączonym pliku odpalam UserForm1 przyciskiem z arkusza1. chciałbym żeby automatycznie combobox wypełnił sie danymi z arkusza2 z zakresu Cells(2, 2), do ostatniej wypełnionej komórki, oraz by zliczył jako zmienną ilość tych komórek.

Pomocy


<-wstecz  1  dalej->
wszystkich stron: 1


Sortuj posty: z