< návrat zpět

MS Excel


Téma: VBA a Tabulka - jak zjistit vybraný řádek rss

Zaslal/a 3.11.2023 23:40

Prosím o pomoc
Mám excelovou Tabulku, která se jmenuje "Tabulka".
Umím vybrat konkrétní buňku v Tabulce.
ListObjects("Tabulka").DataBodyRange(3, 2).Select
ListObjects("Tabulka").ListColumns(2).Range(2).Select
ListObjects("Tablka").ListRows(4).Range(1).Select

Nevím však, jak zjistit, který řádek tabulky je vybraný.
Něco jako ActiveCell.Row, ale pro Tabulku.
Když znám na kterém řádku tabulka leží, tak si to odečtu, ale co když to nevím?
Napadá mě jedině testovat řádek po řádku, jestli leží v dané Tabulce a pak si to dopočítat.

Nemáte někdo zkušenosti?
Dík.

Zaslat odpověď >

#055608
elninoslov
Pr.
Sub KtoryRiadokTabulky()
Dim XSelect As Range

With ThisWorkbook.Worksheets("Hárok1")
If Selection.Parent.Name = .Name Then
If TypeName(Selection) = "Range" Then
With .ListObjects("Tabulka")
Set XSelect = Intersect(Selection, .DataBodyRange)
If Not XSelect Is Nothing Then
MsgBox "Výber začína na riadku " & XSelect.Row - .Range.Row, vbInformation
Else
MsgBox "Výber sa neprelína s objektom " & .Name, vbExclamation
End If
End With
Else
MsgBox "Nie je vybraná oblasť, ale " & TypeName(Selection), vbExclamation
End If
Else
MsgBox "Spúšťate makro na inom liste ako " & .Name, vbExclamation
End If
End With
End Sub


EDIT: Ešte som pridal ošetrenie prípadu, ak nie je vybraná žiadna oblasť, ale napr. ovládací prvok, graf, či obrázok ... vyvolalo by to totiž chybu.
Aspoň je pekne vidieť, ako funguje programovanie, že pre 1 funkčný riadok treba myslieť a ošetriť množstvo možných stavov, ktoré by mohli nastať. A to tam ešte nie je zakomponované ošetrenie neexistencie požadovaného listu a neexistencie Tabuľky "Tabulka".
Příloha: zip55608_vybrany-riadok-tabulky-cislo.zip (17kB, staženo 6x)
citovat
#055609
avatar
Děkuji za příklad řešení.
Kontrola listu nebude nutná, protože makro se bude spouštět z toho listu a bez dané Tabulky nemá smysl makro spouštět.
Ale určitě kvůli komplexnosti to je dobré doplnit.citovat
#055610
avatar
Já bych asi testoval buňku po buňce, jestli už patří do Tabulky nebo ne.
"Intersect" mě vůbec nenapadl. A přitom tak jednoduché a rychlé řešení.

A ano, máte pravdu. Kvůli jednomu řádku hromada testů.citovat
#055611
avatar
Pokud je dotaz na pozici vybrané buňky v tabulce, tak stačí

On Error GoTo nic
With Selection
If .ListObject.Name = "Tabulka" Then MsgBox .Row - .ListObject.Range.Row
End With
nic:
citovat
#055612
elninoslov
Nikdy ma nenapadlo skúmať, či má Selection vlastnosť ListObject. Nová infoška, dík. 1 Zaujímavosťou je, že to nie je ListObjects, ale ListObject. Teda ak vyberiem 2 Tabuľky, ListObject je iba tá prvá.

Skrátene ide napísať aj verzia s Intersect, ale nie tak krátko ako Vaša verzia:
On Error Resume Next
With Worksheets("Hárok1").ListObjects("Tabulka")
MsgBox Intersect(Selection, .DataBodyRange).Row - .Range.Row
End With


Každopádne tak či tak strácame info o konkrétnej chybe. Treba sa rozhodnúť či je toto info potrebné.citovat
#055613
avatar
@lubo také děkuji.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