< návrat zpět

MS Excel


Téma: Office 2013 pojmenované tabulky a sloupce ve VBA rss

Zaslal/a 12.9.2014 10:39

Jeza.mAhoj,

v Office 2013 se setkávám s možností formátování oblasti jako tabulky, kdy pak vzorce v této tabulce využívají názvy sloupců.
Například tabulka o dvou sloupcích pojmenovaných JMENO a PRIJMENI, když pak v rámci tabulky chci do třetího sloupce dosadit CELE JMENO, tak by vzorec vypadal asi takto:
=[@[PRIJMENI]] &" "& [@[JMENO]]
kdybych totéž chtěl udělat na stejném řádku, ale mimo tabulku, tak by vzorec vypadal takto:
=TB_JMENA[@PRIJMENI] &" "& TB_JMENA[@JMENO]&".

No a teď ta má otázka :-).
Lze toto použít v makru?
Kdybych měl například makro
msgbox List1.Range("TB_JMENA").Cells(radek, sloupec)
řádek je jasný, ten si musím asi definovat vždy číslem, ale co sloupec, kdybych se nechtěl odkazovat na konkrétní číslo sloupce, ale na název sloupce?
Teda aniž bych před tím jiným makrem hledal číslo sloupce podle názvu sloupce :-).
Jde mi o to, že bych se pak v makru neodkazoval fixně na konkrétní sloupec, respektive by se z absolutního odkazu stal relativní.

Díky
M@

Zaslat odpověď >

icon #021567
avatar
Nie len v 2013, excel tables existujú v 2010, som si skoro istý, že i v 2007 (v predošlých verziách neviem) :)

Dá sa nejako takto, posielam len ako inšpiráciu, moc som to nedoťahoval k dokonalosti 1 :Sub TEST()
Dim myLo As ListObject, myRng As Range, i As Byte
Set myLo = ActiveSheet.ListObjects("TB_JMENA")
For i = 1 To myLo.ListRows.Count
Set myRng = Intersect(myLo.ListRows(i).Range, myLo.ListColumns("CELE JMENO").Range)
MsgBox myRng
Next i
Set myLo = Nothing
Set myRng = Nothing
End Sub


edit: názvy stĺpcov zistiť napr. For Each Cell In myLo.HeaderRowRange
MsgBox Cell
Next Cell

zapísať do nejakého poľa a potom z tohto poľa volať..

Proste, celé je to o tom, preskúmať objekt ListObject a jeho vlastnosti a metódy 1citovat
#021573
Jeza.m
No jo, já hupsnul z 2003 rovnou do 2013 :-), tak jsem to dříve nezaznamenal :-).
Kód mi pomohl a do budoucna jej budu hojně využívat :-), Děkuji.

Po pár pokusech to vypadá že si vystačím i s jednořádkovou syntaxí :-), viz. příklady níže:
MsgBox Range("TB_JMENA").ListObject.ListColumns("JMENO").Range(2) 'hlavička = řádek 1
MsgBox Range("TB_JMENA").ListObject.ListColumns("JMENO").DataBodyRange.Rows(1) 'hlavička = řádek 0
MsgBox Range("TB_JMENA").Cells(1, Range("TB_JMENA").ListObject.ListColumns("JMENO").Index) 'hlavička = řádek 0


Díky
M@citovat
icon #021574
avatar
rado sa stalo
písal som, že je treba preštudovať vlastnosti a metódy daného objektu a páč viem, že si kluk šikovný, vôbec som nepochyboval o tom, že si to dotiahneš 1citovat

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