Excel makró nem fut le munkalap védelem alatt

Excel makró nem fut le munkalap védelem alatt
2016-05-09T16:32:58+02:00
2016-05-12T09:57:35+02:00
2022-10-15T22:01:39+02:00
Töpörtyű
Van egy munkalapom excel-ben, ami tartalmaz 2 gombot (Fejlesztőeszközök > Beszúrás > Űrlap vezérlőelemek > Gomb)
Mindkét gombhoz makró van rendelve. Ez a 2 makró 1 modulon belül van.
Az egyik gomb annyit csinál, hogy az 1-nél nagyobb számot tartalmazó cellákra leszűr.
A másik gomb annyit csinál, hogy "visszahozza az összes cellát a szűrésből".
A probléma az, hogyha levédem a munkalapot, hogy ne tudják módosítani, akkor hiába nyomok rá a gombokra, nem fut le a makró (mivel védett a munkalap).
Találtam egy olyan megoldást, ami feloldja a munkalapot a makró futtatás idejére, majd újra levédi a munkalapot jelszóval.
Tehát ha rányomok a gombokra, akkor feloldja a munkalapot, lefut a saját szűrős makróm, majd utána egyből visszaállítja a munkalap védelmét.
Ezt a makrót találtam ennek a megoldásához:



Sheet1.Unprotect Password:="jelszóhelye"

'ide kellene írni az én makrómat elvileg, de hiába írtam ide, nem működik így

Sheet1.Protect Password:="jelszóhelye"



-----------------------------------------------------------------

Microsoft Excel objects-em ezt tartalmazza:

Private Sub CommandButton1_Click()
osszes
End Sub

Private Sub CommandButton2_Click()
megrendeles
End Sub

-----------------------------------------------------------------

A modulom pedig ezt tartalmazza:

Sub megrendeles()
    Range("B2").AutoFilter Field:=1, Criteria1:=">=1", Operator:=xlAnd
End Sub

Sub osszes()
    Range("B2").AutoFilter Field:=1
End Sub

-----------------------------------------------------------------

A kérdésem, hogy a saját makrómba hogyan másoljam be ezt a "védelem feloldós és újralevédős" másik makrót, hogy közte lefusson a saját makróm is?
Mutasd a teljes hozzászólást!
Szia!

Ne a munkalapodat nevezgesd át szerintem, hanem a kódban írd át a Sheet1 -szöveget Munka1-re.

Az Excelben a munkalapra két névvel is hivatkozhatsz, egyik a munkalap neve, amit a munkalap fülön is látsz, ebben az esetben a Sheets(név) formát kell használni.
A másik a munkalap kódneve, amit a VBA ablakban elől látsz (utána zárójelben van a munkalapfülön látható név), ekkor elég a kódnév formát használni, ahogyan a küldött kódban is van.

Üdv.
Mutasd a teljes hozzászólást!

  • Én ehez talán túlzásnak tartom de én a következőt csináltam:

    Csinálj egy külön modult amibe a következőt teszed be:

    Function pass() pass = "jelszó" End Function Function Protectit() Dim x As Variant For Each x In ActiveWorkbook.Sheets If x.Name = "Munka1" Or x.Name = "Munka2" Then x.Protect Password:=pass, DrawingObjects:=True, Contents:=True, Scenarios:=True End If Next ActiveWorkbook.Protect Password:=pass, Structure:=True End Function Function Unprotectit() Dim x As Variant ActiveWorkbook.Unprotect Password:=pass For Each x In ActiveWorkbook.Sheets x.Unprotect Password:=pass Next End Function
    Utána a sajátodba:

    Private Sub CommandButton1_Click()

    Protection.Unprotectit

    osszes

    Protection.Protectit

    End Sub

    Remélem működni fog!
    Mutasd a teljes hozzászólást!
  • Kösz a hozzászólást! : )
    Az nehezíti az ügyet, hogy vannak olyan cellák, melyekbe szeretném ha jogosultságuk lenne beleírni.
    Én nem értek a kódoláshoz, de azt látom, hogy a kódodban megadtad, hogy mit védjen a jelszó. Objektumokat,  tartalmat stb...
    Szükség lenne arra, hogy bizonyos cellákba beleírhassanak a népek, de a többit ne tudják módosítani, mert az nekik se jó és nekem se :D  (mindemellett pedig ha rányomnak az említett 2 gombra, akkor fusson le a hozzájuk rendelt autofilter makró.
    Próbáltam ezt beállítani sima lapvédelemmel úgy, hogy zároltam meg feloldottam bizonyos cellákat és akkor ennek megfelelően állítottam be a lapvédelmet jelszóval. Ez sikerült is, csak a 2 gomb makróját se engedte lefuttatni így. Aztán találtam meg ezt az oldalt: LINK
    csak mivel nem tudok kódolni, így kérdőjel, hogy mit hova másoljak. Nyilván a józan paraszti észnek is vannak korlátai :D A másolásnak meg főleg.
    Mutasd a teljes hozzászólást!
  • Szia!

    A worksheet/workbook protect metódusának van egy UserInterfaceOnly paramétere, ami azt teszi lehetővé, hogy a makrók fussanak, de a felhasználók "kézzel" ne tudjanak írni az adott védett objektumba.
    Használata egyszerű, amikor a védelmet beállítod, hozzá kell írni ezt a paramétert is:

    Sheet1.Protect Password:="jelszo",UserInterfaceOnly:=True
    A paraméter hatása addig tart, amíg a munkafüzet nyitva van, illetve minden védelem beállításnál ismételten meg kell adni.
    Ha a Thisworkbook  Workbook_Open eseményébe írod be a munkalapok/munkafüzet védelmét a fenti paraméterrel, akkor a makrók tudnak futni és nem kell minden egyes alkalommal megszüntetni majd beállítani a védelmet.
    Azoknál a celláknál, amelyeket szeretnél a felhasználóval kitöltetni, a zárolást fel kell oldani a védelem előtt, de miután ezt alapvetően hosszabb távra tervezzük, elég egyszer a munkalapon kézzel megcsinálni...
    Üdv.
    Mutasd a teljes hozzászólást!
  • Szia!

    Köszi a hozzászólást! :)
    Valamit még mindig rosszul csinálok.
    Feloldottam azokat a zárolt cellákat, ahova a népek írhatnak,
    a többire pedig lapvédelmi jelszót állítottam be.
    Utána bemásoltam az általad írt helyre a kódot. (a jelszó helyére beírtam egy 1-est, mint jelszó)

    Annyi változás történt, hogy most már ha a 2 gombra nyomok, akkor a DEBUG opciót is kihozza. (eddig azt nem dobta fel, mint lehetőséget)
    A DEBUG-ra rányomva pedig a modulomban található AutoFilter sorát citromozza ki hibaként, ezt:
    Range("B2").AutoFilter Field:=1, Criteria1:=">=1", Operator:=xlAnd

    Csatolok egy képernyőmentést. Hátha úgy kiderül a turpisság :D
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Egyébként meg boldog névnapot Feri! :D
    Mutasd a teljes hozzászólást!
  • Szia!

    Az autofilter használata zárolt munkalapon kétféle módon lehetséges:
    1. A zárolás előtt ráteszed az autofiltert konkrét szűrés nélkül (Munka1.Autofilter).
    Ezután a zároláshoz az allowfiltering:=true, userinterfaceonly:=true paramétereket is használod.
    Ebben az esetben működik a szűrés zárolt munkalapon is.
    2. Ha zárolás előtt nem volt az autofilter bekapcsolva, akkor használata előtt fel kell oldani a zárolást a makróban - megcsinálni a szűrést, majd visszatenni a zárolást - a fenti két paramétert használva.

    Üdv.
    Mutasd a teljes hozzászólást!
  • Ajaj. Nem tiszta számomra, amit írtál.
    Makró van rendelve 2 gombhoz. (ugyanarra az oszlopra = B vonatkozóan)
    Az egyik gombbal leszűrhet az illető, és ha 1 vagy 1-nél nagyobb számot írt be szűrés előtt a B valamely cellájába, akkor csak azokat a sorokat fogja megjeleníteni, amibe írt számokat.
    A másik gombbal úgymond csak "visszaszűri a B összes celláját. (így azokat is látni fogja újra, amibe nem írt semmilyen számot)
    (egyébként maga a szűrő a B5-től indul asszem, nem közvetlenül B1-től, tehát nem az egész oszlopra szűr elvileg, hanem csak a B oszlop 5. cellájától lefelé)
    Nem értem, amit írtál sajnos, de hogyha érteném, akkor se tudnám ez alapján, hogy
    mit és hova írjak.
    Mutasd a teljes hozzászólást!
  • ,Szia!

    Szerintem próbáld meg ezt lsz.

    Sub megrendeles() Sheet1.Unprotect Password:="jelszóhelye" Range("B2").AutoFilter Field:=1, Criteria1:=">=1", Operator:=xlAnd Sheet1.Protect Password:="jelszóhelye", Userinterfaceonly:=true,Allowfiltering:=true End Sub Sub osszes() Sheet1.Unprotect Password:="jelszóhelye" Range("B2").AutoFilter Field:=1 Sheet1.Protect Password:="jelszóhelye", Userinterfaceonly:=true,Allowfiltering:=true End Sub
    Üdv.
    Mutasd a teljes hozzászólást!
  • Szia!

    Valami nem jó még mindig sajnos.
    Ha rányomok a makrót futtató egyik gombra, akkor a DEBUG ezt citromozza:

    Sub megrendeles() Sheet1.Unprotect Password:="1"

    Ha rányomok a makrót futtató másik gombra, akkor a DEBUG ezt citromozza:

    Sub osszes()

     Sheet1.Unprotect Password:="1"


    Tehát már a jelszófeloldással is problémája van.
    Pedig csak annyit csináltam, hogy bemásoltam az általad írt kódot a modulba és beállítottam a lapvédelmet a kódban szereplő "1" jelszóval. A lapvédelemnél pedig engedélyeztem = bepipáltam
    a nem-zárolt cellák kijelölését
    és az auto-szűrőt.
    Szal ezekhez van jogosultságuk.
    Mutasd a teljes hozzászólást!
  • Szia!

     Persze a hibaüzenet most sem ártott volna.
    A korábbi képről látom, hogy a munkalapod kódneve Munka1.
    A Sheet1 helyett mindenhova ezt kell írnod! 
    Sajnos én nem voltam elég figyelmes.

    Üdv.
    Mutasd a teljes hozzászólást!
  • Már átneveztem Sheet1 -re korábban a munkalap nevét és úgy jelentkeznek ezek a hibák.
    Mutasd a teljes hozzászólást!
  • Jaaa, hogy a Properties- ben mondod? Pill átírom ott is Sheet1 -re.
    Mutasd a teljes hozzászólást!
  • MŰKÖDIIIIIK MŰŰŰKÖDIK A FOGAAAAAAAT! :D:D   - Star Wars I.
    Ez volt a problem. A Properties-ben kellett átírni Sheet1 -re a Name -t
    Mutasd a teljes hozzászólást!
  • Szia!

    Ne a munkalapodat nevezgesd át szerintem, hanem a kódban írd át a Sheet1 -szöveget Munka1-re.

    Az Excelben a munkalapra két névvel is hivatkozhatsz, egyik a munkalap neve, amit a munkalap fülön is látsz, ebben az esetben a Sheets(név) formát kell használni.
    A másik a munkalap kódneve, amit a VBA ablakban elől látsz (utána zárójelben van a munkalapfülön látható név), ekkor elég a kódnév formát használni, ahogyan a küldött kódban is van.

    Üdv.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd