< návrat zpět

MS Excel


Téma: Combobox RowSource - každý třetí rss

Zaslal/a 28.2.2014 10:48

Mám data v jednom soupci "B". Do Comboboxu potřebuji načíst jen každou třetí položku. To znamená z "B3", "B6", "B9".....
jak to vyřešit? Napadlo mě nějak každou třetí položku překopírovat do pomocného sloupečku a ten pak do Comboboxu načíst.
Data přibývají.
Ale nevím zda není jiné elegantnější řešení
Dík za nápady

stop Uzamčeno - nelze přidávat nové příspěvky.

icon #018056
avatar
Je možné použiť cyklus; do kódového okna formulára zadať niečo v tvare:Private Sub UserForm_Initialize()
Dim mySh As Worksheet, lastRw As Double, i As Byte
Set mySh = Sheet2
With mySh
lastRw = .Cells(.Cells.Rows.Count, 2).End(xlUp).Row
For i = 3 To lastRw Step 3
Me.ComboBox1.AddItem .Cells(i, 2)
Next i
End With
End Sub
citovat
#018057
avatar
můžete trochu popsat, co znemenají jendotlivé proměné a další. Nedaří se mi to "zakomponovat" do mého sešitu.
Co mám pak vložit do RowSource ?citovat
icon #018058
avatar
Do RowSource nebudete vkladať nič, pri inicializácii formulára si tento do Comboboxu načíta každú 3. bunku zo stĺpca B, listu Sheet2. Takže Vaša úprava bude spočívať akurát v tom, že Sheet2 nahradíte kódovým názvom listu, z ktorého sa majú hodnoty do Comba načítať. Rovnako ComboBox1 v kóde nahradíte tým správnym.
Jednotlivé premenné:
mySh - list, z ktorého sa majú do Comba načítať údaje
lastRw - číslo posledného použitého riadku v stĺpci B listu mySh
i - pomocná premenná pre krok cyklu (bunka B3 až Bxxx s krokom 3, t.j. každá tretia).citovat
#018059
avatar
Už mi to funguje !!

Dělal jsem chybu, že jsem zadával špatný název listu .
Moc děkuji. 1

P.S. šlo by to seřadit podle abecedy?citovat
icon #018060
avatar
zoradiť podľa abecedy by to samozrejme šlo, napr. použitím nejakého triediaceho algoritmu. Dajte si vyhľadať v google trebárs bubble sort VBA (nie je to optimálny spôsob z pohľadu run-time, ale pre tieto účely postačí) a zakomponujte si do kódu, ja bohužiaľ už zas nemám čas, ale pokiaľ si s tým neporadíte, tak niekto šikovný Vám to sem hodí.
edit:len technická - lastRw stačí deklarovať ako Long, deklarácia Double je zbytočnácitovat
#018064
Opičák
Jiný způsob:
nejprve načtení každé třetí položky do POLE, pak bublinové třídění jak psal AL a zobrazení UFORM s CBOXEM.
Příloha: zip18064_setrideny-seznam-do-comboboxu.zip (21kB, staženo 18x)
citovat
icon #018075
eLCHa
@AL
Jen technická. Když máte lastRw Long, potom i by mělo být taky Long ;)For i = 3 To lastRw

@Opičák
Jen technická. Kód je samozřejmě funkční, ale vzhledem k tomu, že jsme schopni říct, na kterou pozici se má položka přidat, tak zbytečně načítáte do pole, které pak seřazujete.
Můžete to udělat rovnou

Sub nacistSeznam4()
Dim sCellValue As String, i As Integer, j As Integer
With UserForm1.ComboBox1
For i = 1 To Range(Range("B3"), Range("B3").End(xlDown)).Cells.Count Step 3
sCellValue = CStr(Range(Range("B3"), Range("B3").End(xlDown)).Cells(i).Value)

If .ListCount = 0 Then
.AddItem sCellValue
Else
For j = 0 To .ListCount - 1
If .List(j) > sCellValue Then
.AddItem sCellValue, j
Exit For
ElseIf j = .ListCount - 1 Then
.AddItem sCellValue
End If
Next j
End If
Next i

.ListIndex = 0

End With 'UserForm1.ComboBox1
UserForm1.Show
End Sub
citovat
icon #018082
avatar
eLCHa: u toho i pmn trochu záleží i na predpoklade, rádovo koľko záznamov v kombe bude zobrazených, aby to kombo dávalo zmysel, toľko k mojej voľbe datového typu Bytecitovat
icon #018083
eLCHa
Tohle je opravdu jen technická a hlavně principiální poznámka. Jsou jazyky, které by vás takto ani nepustily dále.

Pokud máte, že i může být od 1 do x
pak by to i mělo být stejného typu jako x právě proto, že i může nabýt kterékoliv hodnoty od 1 do x. Tedy když budete mít x = 300 a u i nastavíte byte, tak i=256 vám vyhodí chybu.
Máte napsánoFor i = 3 To lastRw Step 3a pravděpodobnost, že číslo řádku bude vyšší než 255 tu je.citovat
icon #018084
avatar
o.k.citovat

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Aktivní diskuse

odpocet a storno tl.

PavDD • 28.3. 8:53

odpocet a storno tl.

Začátečník • 26.3. 14:39

odpocet a storno tl.

PavDD • 26.3. 10:22

odpocet a storno tl.

elninoslov • 26.3. 7:50

odpocet a storno tl.

PavDD • 26.3. 7:26

odpocet a storno tl.

elninoslov • 25.3. 22:34

odpocet a storno tl.

Začátečník • 25.3. 15:09