Sub Skrij()
Dim lItem As Long
For lItem = 0 To Skrij_razkrij.ListBox1.ListCount - 1
If Skrij_razkrij.ListBox1.Selected(lItem) = True Then
For Each cell In ActiveSheet.UsedRange
If Skrij_razkrij.CheckBox1.Value = True Then
If Skrij_razkrij.OptionButton1.Value = True Then
If cell = Skrij_razkrij.ListBox1.List(lItem) _
And cell <> "" Then cell.EntireColumn.Hidden = True
Else
If cell = Skrij_razkrij.ListBox1.List(lItem) _
And cell <> "" Then cell.EntireColumn.Hidden = False
End If
End If
If Skrij_razkrij.CheckBox2.Value = True Then
If Skrij_razkrij.OptionButton1.Value = True Then
If cell = Skrij_razkrij.ListBox1.List(lItem) _
And cell <> "" Then cell.EntireRow.Hidden = True
Else
If cell = Skrij_razkrij.ListBox1.List(lItem) _
And cell <> "" Then cell.EntireRow.Hidden = False
End If
End If
Next cell
End If
Next lItem
Range("A1").Select
End Sub
Zgornji makro mi skriva ali razkriva vrstice ali stolpce v skladu z nastavitvami na formi "Skrij_razkrij". Makro dela v redu, vendar pa bi rad vključil še en pogoj. Imam namreč nekaj območij poimenovanih in bi želel, da mi makro tudi pogleda ali se neka celica nahaja v območju npr. z imenom "Cona_1" In če se nahaja naj skrije vrstico ali stolpec, oz. razkrije, sicer pa ne.
Hm... ;( Ne razumem kaj natančno vas muči. Če želite samo ugotoviti ali se neka celica nahaja znotraj območja, lahko uporabite funkcijo Intersect. Primer uporabe boste našli tudi v tem forumu. Izberite opcijo Išči in vpišite Intersect.
Če pa sem vas razumel narobe, pa poskusite podrobneje razložiti, kaj vas zanima.
If cell = Skrij_razkrij.ListBox1.List(lItem) And _
Not Intersect(cell, Range("Cona1")) Is Nothing Then cell.EntireColumn.Hidden = True
Vendar pa bi želel rešiti še en problem. Na listu imam več poimenovanih območij. Rad bi jih najprej zbral, recimo v combobox-u na formi "Skrij_razkrij"!
Tako bi coda izgledala nekako tako:
Kakšno napako pa javi Excel? To kar ste vpisali bi pravzaprav moralo delovati? No če se seznam nahaja na drugem listu, potem je mogoče potrebno določiti samo to:
If cell = Skrij_razkrij.ListBox1.List(lItem) And _
Not Intersect(cell, Range(Skrij_razkrij.Combobox1.value)) Is Nothing Then cell.EntireColumn.Hidden = True
Nič ne javi, ker ne znam napolniti Combobox z poimenovanimi obsegi. Torej moral bi pregledati za poimenovanimi obsegi na listu in z njimi napolniti Combobox. Tega pa ne znam
To bo pa mislim šlo. Samo moram preizkusiti še doma, kjer imam vse to v Personal mapi, da bi bilo makro možno pognati v vsakem zvezku. Preizkusim in javim. Hvala
Sem preizkusil vse skupaj in ugotovil, da če je forma in modul, recimo v zvezku z imenom Zvezek1, potem zadeva deluje. Če pa imam formo in modul v Personal.xls in potem poženem formo, pa mi polj ne najde. Ali se da kodo spremeniti tako, da bi delala v vsakem odprtem zvezku.
Vendarle je malo nerodno, da v prav vsak zvezek, kjer bi to potreboval, vedno znova kopiram modul in formo. Je to sploh možno?
Vse je v magični besedi ThisWorkbook, ki pač pomeni 'ta delovni zvezek' in v primeru osebnega zvezk z makri pač pomeni njega samega... Vi pa želite delati z 'aktivnim delovnim zvezkom' in to je seveda ActiveWorkbook!
Imam pa še eno vprašanje, saj se je pojavil nov problem pri iskanju imen polj. Pojavila so se namreč polja,:shock: ki se imenujejo npr. 'Moj list!_FilterDatabase ali pa Moj list2!FilterDatabase - tokrat brez opuščaja. Ugotovil sem, da so to iskanja z vgrajenim samodejnim filtrom. Torej si Excel zapomni in zapisuje vsa filtriranja. Kako bi se tega lahko znebil, da se mi ta imena nebi pojavljala v Combobox-u Se lahko ta imena kje izbrišejo, saj jih je lahko tudi 100 ali več? V menuju Vstavljanje Ime...jih ni...