< návrat zpět

MS Excel


Téma: Je buňka v oblasti? rss

Zaslal/a 16.11.2011 8:24

Zdravím,
potřeboval bych napsat podmínku. Která by testovala, zda označená buňka je v pojmenované oblasti "vynosy"

Prostě něco jako

if selection is insade range("vynosy") then
...
end if


Ale toto samozřejmě nefunguje :-)

Ještě jsem vygooglil funkci inrange
http://www.exceltip.com/st/Determine_if_a_cell_is_within_a_range_using_VBA_in_Microsoft_Excel/484.html
ale ta je nějak mimo. Nezná ji ani nápověda VBA.
Prosím o radu jestli víte. Napadá mě jen testovat prvně sloupce a pak řádky jestli spadají do oblasti, ale není nějaké jednodušší řešení?

Děkuji :-)

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

#006478
avatar
Nápověda k funkci Intersect
Worksheets("Sheet1").Activate
Set isect = Application.Intersect(Range("rg1"), Range("rg2"))
If isect Is Nothing Then
MsgBox "Ranges do not intersect"
Else
isect.Select
End If
citovat
#006498
Lano
Omlouvám se, že do toho vstupuji, ale toto mě taky zajímá. Zatím to řeším pomocí If řádek od-do a sloupec od-do. Snad chipounovi odpověď stačí, ale já z ní moudrý nejsem. 3 Konkrétně: mám oblast A1:D10 pojmenovanou "Oblast". A chci zjistit, jestli aktivní buňka je v této oblasti, nebo ne. Šlo by to událostním makrem Worksheet_SelectionChange ?
Díkycitovat
#006502
avatar
Lano: To je naozaj jednoduché, napr. takto:Sub pom()
Dim isect As Range
Set isect = Application.Intersect(Range("Oblast"), Range(ActiveCell.Address))
If isect Is Nothing Then
MsgBox "Aktívna bunka sa nenachádza v oblasti Oblast"
Else: MsgBox "Aktívna bunka sa nachádza v oblasti Oblast"
End If
End Sub
citovat
#006503
avatar
Lano: a áno, môžeš to dať do udalostného makra. Za predpokladu, že pomenovaná oblasť "Oblast" je na Liste 1 a chceš testovanie obmedziť iba na tento list, tak kód je:
Option Explicit
Dim Isect As Range

Private Sub Workbook_Open()
pom
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
pom
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Excel.Range)
If Target.Parent.Index = 1 Then pom1
End Sub
Sub pom()
If ActiveSheet.Index = 1 Then pom1
End Sub

Sub pom1()
Set Isect = Application.Intersect(Range("Oblast"), Range(ActiveCell.Address))
If Isect Is Nothing Then
MsgBox "Aktívna bunka sa nenachádza v oblasti Oblast"
Else: MsgBox "Aktívna bunka sa nachádza v oblasti Oblast"
End If
End Sub

Rutina Workbook_SheetActivate je tam kvôli situácii, kedy sa preklikneš do Listu 1, ale nemeníš aktívnu bunku v danom liste - v takom prípade totiž nedôjde k aktivácii rutiny Workbook_SheetSelectionChange a nedostal by si jej pomocou info o tom, či je aktívna bunka v sledovanej oblasti. To isté platí i pre rutinu Workbook_Open. Obe volajú rutinu pom, tá zas rutinu pom1 (aby nebolo nutné v jednotlivých rutinách prepisovať tie samé časti kódu). Všetkých päť je treba vložiť do ThisWorkbook (ale to asi vieš)citovat
#006507
Lano
Super díky, teď je to jasné. Asi pomaleji chápu... Díky moc.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