Pogojno skrivanje vrstic in stolpcev

Pomoč pri izdelavi makrov
Odgovori
cedra
Prispevkov: 264
Pridružen: Po Jul 25, 2005 11:11 pm
Kraj: Kamnik

Pogojno skrivanje vrstic in stolpcev

Odgovor Napisal/-a cedra »

Sestavil sem si naslednji makro:

Koda: Izberi vse

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.

Torej tukaj bi moral dodati še en pogoj:

Koda: Izberi vse

If cell = Skrij_razkrij.ListBox1.List(lItem) _
And cell <> "" Then cell.EntireColumn.Hidden = True 
Prosim za pomoč.
lp,

cedra
admin
Site Admin
Prispevkov: 3692
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

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.
lp,
Matjaž Prtenjak
Administrator
cedra
Prispevkov: 264
Pridružen: Po Jul 25, 2005 11:11 pm
Kraj: Kamnik

Odgovor Napisal/-a cedra »

Res ste mi pomagali z namigom in sem problem rešil. :) takole:

Koda: Izberi vse

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:

Koda: Izberi vse

If cell = Skrij_razkrij.ListBox1.List(lItem) And _
            Not Intersect(cell, Range(Combobox1.value)) Is Nothing Then cell.EntireColumn.Hidden = True
Upam, da sem razumljivo opisal kaj bi želel.
lp,

cedra
admin
Site Admin
Prispevkov: 3692
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

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:

Koda: Izberi vse

If cell = Skrij_razkrij.ListBox1.List(lItem) And _
            Not Intersect(cell, Range(Skrij_razkrij.Combobox1.value)) Is Nothing Then cell.EntireColumn.Hidden = True
lp,
Matjaž Prtenjak
Administrator
cedra
Prispevkov: 264
Pridružen: Po Jul 25, 2005 11:11 pm
Kraj: Kamnik

Odgovor Napisal/-a cedra »

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 :oops:
lp,

cedra
admin
Site Admin
Prispevkov: 3692
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

:) To pa je nekaj povsem drugega... Imena dobite preprosto:

Koda: Izberi vse

  For Each ime In ThisWorkbook.Names
    Debug.Print ime.Name
  Next
Če pa želite napolniti ComboBox, pa boste v zanki pač zamenjali debug.print... z ComboBox1.Add :wink:
lp,
Matjaž Prtenjak
Administrator
cedra
Prispevkov: 264
Pridružen: Po Jul 25, 2005 11:11 pm
Kraj: Kamnik

Odgovor Napisal/-a cedra »

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 :D
lp,

cedra
cedra
Prispevkov: 264
Pridružen: Po Jul 25, 2005 11:11 pm
Kraj: Kamnik

Odgovor Napisal/-a cedra »

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?
lp,

cedra
admin
Site Admin
Prispevkov: 3692
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

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!
lp,
Matjaž Prtenjak
Administrator
cedra
Prispevkov: 264
Pridružen: Po Jul 25, 2005 11:11 pm
Kraj: Kamnik

Odgovor Napisal/-a cedra »

Hvala za odgovor.

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 :evil: Se lahko ta imena kje izbrišejo, saj jih je lahko tudi 100 ali več? V menuju Vstavljanje Ime...jih ni... :)
lp,

cedra
cedra
Prispevkov: 264
Pridružen: Po Jul 25, 2005 11:11 pm
Kraj: Kamnik

Odgovor Napisal/-a cedra »

Sem našel rešitev na spletu. :D Če koga zanima...

Koda: Izberi vse

For Each ime In ActiveWorkbook.Names
    If ime.Name Like "*_FilterDatabase" Then GoTo dalje
Debug.print ime.Name
dalje:
  Next
lp,

cedra
Odgovori