< návrat zpět

MS Excel


Téma: VBA ComboBox RowSource z řádku istu rss

Zaslal/a 13.7.2016 12:49

Ahoj,

potřeboval bych poradit s nastavením comboboxu a to konkrétně parametru RowSource

Pokud jsou položky v řádcích, tak je to snadné:
ComboBox1.RowSource = "Týmy!A6:A100"
Já bych ale potřeboval, aby se v ComboBoxu zobrazovaly k výběru položky, které jsou na listu v řádku takže něco jako:
ComboBox1.RowSource = Application.WorksheetFunction.Transpose(Range("Týmy!A6:Z5"))
ale s tímhle nemám štěstí. Mohli by jste mi prosím poradit, jak na to? dík

Zaslat odpověď >

#032040
avatar
Vykašlete se na RowSource, převezměte při inicializaci formuláře transponovanou oblast do pole a přiřaďte ho do vlastnosti List pole se seznamem.

Private Sub UserForm_Initialize()

'transpozice oblasti a přesun do pole
arrPolePolozek = _
WorksheetFunction.Transpose(Worksheets("Týmy").Range("A6:C6"))

'převzetí pole ComboBoxem
ComboBox1.List = arrPolePolozek

End Sub
citovat
#032041
avatar

xlnc napsal/a:

Vykašlete se na RowSource, převezměte při inicializaci formuláře transponovanou oblast do pole a přiřaďte ho do vlastnosti List pole se seznamem.


bezva, díky moc
jen několik drobných dotazů:
proč je lepší použít .list míst .rowsource?

proč mi funguje:
arrPolePolozek = _
WorksheetFunction.Transpose(Worksheets("Týmy").Range("A5:C5"))

a tento kód nefunguje, pokud není aktivní list "Týmy" (runtime error 1004):arrPolePolozek = _
WorksheetFunction.Transpose(Worksheets("Týmy").Range(Cells(5, 1), Cells(5, 3)))

hodilo by se mi na range zadávat pomocí číselných souřadnic, kvůli jednoduché změně výběru v kóducitovat
icon #032042
eLCHa
proč je lepší použít .list míst .rowsource
Není to lepší, je to jen jiné. RowSource očekává objekt typu Range, jenže vy potřebujete objekt typu pole, který vrací Transpose. Ten vložite do List.

tento kód nefunguje, pokud není aktivní list "Týmy" (runtime error 1004):
Protože pokud použijete nespecifikované Range, Cells atp., tak se vždy berou buňky z aktivního listu aktivního sešitu . Takže musíte specifikovat list pro všechny tyto objekty, např. pomocí With
With Worksheets("Týmy")
arrPolePolozek = WorksheetFunction.Transpose(.Range(.Cells(5, 1), .Cells(5, 3)))
End With
nebo použijte ResizearrPolePolozek = WorksheetFunction.Transpose(Worksheets("Týmy").Cells(5, 1).Resize(1, 3))citovat
#032043
avatar
Fakt skvělé, díky moc.

Ještě bych se zeptal na poslední věc.
Je nějakým způsobem možné do pole vložit hodnoty z několika výběrů? Např (D11:F11;H13:J13)citovat
icon #032044
eLCHa
jde všechno, vždy jde jen o použitelnost.
Private Sub UserForm_Initialize()
Dim rData As Range
Set rData = Range("D11:F11,H13:J13")
Dim rArea As Range, rCell As Range
For Each rArea In rData.Areas
For Each rCell In rArea.Cells
ComboBox1.AddItem rCell.Value
Next rCell
Set rCell = Nothing
Next rArea
Set rArea = Nothing
Set rData = Nothing

ComboBox1.ListIndex = 0
End Sub
citovat
icon #032100
avatar
Zaujímavé. Mne napr. teraz inštalovali v práci O365 a u Active X comboboxov prestala fungovať možnosť naplnenia Comboboxov cez vlastnosť ListFillRange, ktorá fungovala v E2007. Musel som to obísť tým, čo navrhuje xlnc, t.j. pomocou vlastnosti comboboxu List. Príklad:Private Sub RegionCombo_Change()
If RegionCombo.Value = "(All)" Then
' CountryCombo.ListFillRange = "All"
CountryCombo.List = WorksheetFunction.Transpose([All])
Else: 'CountryCombo.ListFillRange = RegionCombo.Value
CountryCombo.List = WorksheetFunction.Transpose(ThisWorkbook.Names(RegionCombo.Value).RefersToRange)
End If
[CmbRegion] = RegionCombo.Value
Call ChangeAxisScales
[LC_CmbRegion] = RegionCombo.Value
Call ChangeLC_ChartAxisScales
End Sub

Týmto spôsobom som musel poupravovať kódy v niekoľkých comboboxoch v scorecard dashboarde, ktorý spravujem. Samozrejme, so zachovaním spätnej kompatibility voči E2007.citovat

Uživatelské menu

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

Menu

Formulář Faktura

Formulář Faktura IV

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

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje