Excel cella letiltása

Ez a téma lezárásra került a moderátor által. A lezárás oka: Tudástár: egy téma - egy kérdés/probléma (nem "rondítunk" bele más - pláne, már lezárt - témájába, tessék újat nyitni)!
Excel cella letiltása
2010-06-29T11:00:48+02:00
2010-10-01T06:18:49+02:00
2022-07-26T01:00:37+02:00
Ludwig
Olyan problémám lenne,hogy egy másik mezőt vizsgálva kellene tiltani a bevitelt a cellába vagy engedélyezve hagyni.
A konkrét példa:
Ha a vizsgált mezőbe az van írva,h "megszünt", akkor tiltva van az a mező ahová eredetileg írni lehetett, természetesen ha nem ez a szó van ott akkor lehet írni továbbra is abba a cellába.
Szeretném függvénnyel megoldani amennyiben lehetséges, de akármit meghallgatok.
Előre is köszönöm a segítséget.
Mutasd a teljes hozzászólást!
Ezt csak makróval lehet megoldani, a makrót a kérdéses laphoz rendelve – lapfülön jobb klikk, Kód megjelenítése, a jobb oldalon kapott üres lapra másold be:

Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$C$1" Then ActiveSheet.Protect UserInterfaceOnly:=True If Cells(1, 3) = "megszűnt" Then Cells(1).Locked = True Else Cells(1).Locked = False End If End If End Sub

A lapon azoknál a celláknál, amiket módosíthatsz, meg kell szüntetned a zárolást a cellaformázás Védelem fülén. A tiltás akkor lép érvénybe, ha beállítod a lapvédelmet az Eszközök/Védelem/Lapvédelem menüben.
Ez a makró a C1 cellában (If Target.Address = "$C$1" Then) figyeli a tartalom változását, és ennek megfelelően tiltja az A1 cella (Cells(1).Locked = True) módosítását, vagy engedélyezi azt (Cells(1).Locked = False).
Mutasd a teljes hozzászólást!

  • Üdv!
    Én ilyen függvényről nem tudok. Feltételes formázással nem elég jelölnöd (mondjuk kitöltöd pirossal), h abba a cellába ne írjanak?
    A sima cellavédelmet gondolom ismered, de azt nem lehet képletbe tenni.
    Esetleg makróval lehet, hogy meglehetne csinálni...
    Mutasd a teljes hozzászólást!
  • Ezt csak makróval lehet megoldani, a makrót a kérdéses laphoz rendelve – lapfülön jobb klikk, Kód megjelenítése, a jobb oldalon kapott üres lapra másold be:

    Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$C$1" Then ActiveSheet.Protect UserInterfaceOnly:=True If Cells(1, 3) = "megszűnt" Then Cells(1).Locked = True Else Cells(1).Locked = False End If End If End Sub

    A lapon azoknál a celláknál, amiket módosíthatsz, meg kell szüntetned a zárolást a cellaformázás Védelem fülén. A tiltás akkor lép érvénybe, ha beállítod a lapvédelmet az Eszközök/Védelem/Lapvédelem menüben.
    Ez a makró a C1 cellában (If Target.Address = "$C$1" Then) figyeli a tartalom változását, és ennek megfelelően tiltja az A1 cella (Cells(1).Locked = True) módosítását, vagy engedélyezi azt (Cells(1).Locked = False).
    Mutasd a teljes hozzászólást!
  • Köszi szépen, majd holnap megnézem a melóban,hogy működik-e.
    Csak azért gondoltam függvényre, mert a makrókhoz nem értek :D
    Szóval köszi a segítséget :)
    Mutasd a teljes hozzászólást!
  • Valószínű, hogy nem 1 db cellát akarsz így kezelni. Írd meg a pontos helyüket, és azt, hogy a vezérlő ("megyszűnt" szövegű) cellák hol vannak, akkor átírom a makrót.
    Mutasd a teljes hozzászólást!
  • A megszünt cellák a köv. helyeken lehetnek ha lesznek egyáltalán:
    I3-tól I126-ig.
    A tiltandó feloldandó cellák: H3-tól H126-ig.
    De eredeti állapotban lehessen bele írni, csak akkor tiltódjon le,ha a "megszünt" szó kerül az I-s mezőkbe.
    Mutasd a teljes hozzászólást!
  • A C és H oszlopnál a zárolást meg kell szűntetned, ezután védd le a lapot.
    A makrót a lap kódlapjára másold be.

    Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 9 And Target.Row > 2 And Target.Row < 127 Then ActiveSheet.Protect UserInterfaceOnly:=True If Cells(Target.Row, 9) = "megszűnt" Then Cells(Target.Row, 8).Locked = True Else Cells(Target.Row, 8).Locked = False End If End If End Sub
    Mutasd a teljes hozzászólást!
  • Köszi szépen a segítséget!
    Mutasd a teljes hozzászólást!
  • Szívesen.
    Mutasd a teljes hozzászólást!
  • Üdv. Delila!
    Hasonló problémával küzdök, mint Ludwig. De nekem még nem csak zárolni, hanem törölni is kellene a cellákat, ha az előző mentéskor írható volt.
    Az Ön megoldásából fabrikáltam a következőt:
    Sub Autorun()
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$j$5" Then
    ActiveSheet.Protect UserInterfaceOnly:=True
    If Cells("$J$5") = "Új ÜP elfogadja" Then
    Range("b23").Select
    Selection.ClearContents
    Cells(23, 2).Locked = True
    Range("f23").Select
    Selection.ClearContents
    Cells(23, 6).Locked = True
    Range("j23").Select
    Selection.ClearContents
    Cells(23, 10).Locked = True
    Else
    Cells(23, 2).Locked = False
    Cells(23, 6).Locked = False
    Cells(23, 10).Locked = False
    End If
    End If
    End Sub
    Sajna, nem működik. A Run megnyomásakor Compile Error Expected End Sub hibaüzenet jön.
    Hálás lennék, ha ki tudná javítani egy működőképes megoldásra.
    Előre is köszönöm: Hümi
    Mutasd a teljes hozzászólást!
  • A Cells("$J$5") szintaktika helytelen. Helyesen Cells(sor,oszlop), J5 esetében Cells(5,10), vagy ehelyett Range("$J$5").

    Kicsit lerövidítve a makrót:

    Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$J$5" Then ActiveSheet.Protect UserInterfaceOnly:=True If Target.Value = "Új ÜP elfogadja" Then Range("B23,F23,J23").ClearContents Range("B23,F23,J23").Locked = True Else Range("B23,F23,J23").Locked = False End If End If End Sub
    Mutasd a teljes hozzászólást!
  • Ezt a gyorsaságot nem is reméltem!!!
    Nagyon köszönöm! Még délelőtt lepróbálom.

    Hümi
    Mutasd a teljes hozzászólást!
  • Kedves Delila!

    A táblázatban az aláábi makrók vannak, amiről eddig nem tudott:

    Module1-ben:

    Public Sub Bevitel()
    'TAB hatására mindig az aktív cellára ugrik, ha az nem zárolt, de a munkafüzet védett
    Worksheets("LOÁR").Activate
    ActiveCell.Next.Select
    End Sub

    Sub Torol_1()
    'Törli a cellákat
    Range("b16,f16,j16,s16,w16,b23,f23,j23").Select
    Selection.ClearContents
    'Ugrik a Tartalomra
    Range("b16").Activate
    End Sub

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$J$5" Then
    ActiveSheet.Protect UserInterfaceOnly:=True
    If Target.Value = "Új ÜP elfogadja" Then
    Range("B23,F23,J23").ClearContents
    Range("B23,F23,J23").Locked = True
    Else
    Range("B23,F23,J23").Locked = False
    End If
    End If
    End Sub



    Az első azt a célt szolgálná, hogy Tab-bal mindig a következő cellára ugorjo. Ez működik.

    A második: egy Törlés gomb van elhelyezve az adatbeviteli képernyőn, amit megnyomva az összes beviteli mező törlődik. Ez is működik.

    Valamit biztosan nem jól csinálok, mert az új makró hatástalan.
    Ha segítene, hogy hova kell másolni.
    Most bemásoltam a: Munkafüzetbe, a Cass 1 modulba, a This Workbookba, a Module1-be.

    De a Class1-ben és a Microsoft Exce Objects Munka...-ben csak ez van:
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$J$5" Then
    ActiveSheet.Protect UserInterfaceOnly:=True
    If Target.Value = "Új ÜP elfogadja" Then
    Range("B23,F23,J23").ClearContents
    Range("B23,F23,J23").Locked = True
    Else
    Range("B23,F23,J23").Locked = False
    End If
    End If
    End Sub


    A ThisWorkbookban pedig ez:
    Sub Torol_1()
    'Törli a cellákat
    Range("b16,f16,j16,s16,w16,b23,f23,j23").Select
    Selection.ClearContents
    'Ugrik a Tartalomra
    Range("b16").Activate
    End Sub

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$J$5" Then
    ActiveSheet.Protect UserInterfaceOnly:=True
    If Target.Value = "Új ÜP elfogadja" Then
    Range("B23,F23,J23").ClearContents
    Range("B23,F23,J23").Locked = True
    Else
    Range("B23,F23,J23").Locked = False
    End If
    End If
    End Sub

    Mit csinálok rosszul?
    Előre is köszönettel: Hümi
    Mutasd a teljes hozzászólást!
  • A laphoz kell rendelni. A VBE-ben bal oldalon a lap nevén duplaklikkre jobb oldalon ad egy üres lapot, oda kell bemásolni.
    Mutasd a teljes hozzászólást!
  • Minden létező helyen ott van.
    Mutasd a teljes hozzászólást!
  • A laphoz rendelés másként megközelítve:
    A füzetben a lapfülön jobb klikk, Kód mejelenítése. Az üres lap, ami most megjelenik a jobb oldalon, az lesz a munkalap kódlapja, ide kell bemásolni a makrót.
    Mutasd a teljes hozzászólást!
  • Pontosan így csináltam. Csak ellenőrzésre. Ami ilyenkor latszik: egy lap, aminek a bal felső fehér legördülő mezőjében zárójelben a General, mellette a Declerations szerepel. Az alatta levő nagyobb fehérségben pedig a bemásuol kód, vagy makró.

    A többi helyre már csak kínomban másolgattam be.
    Mutasd a teljes hozzászólást!
  • A General helyett a Worksheet kell, ez volt a hiba.
    Mutasd a teljes hozzászólást!
  • Megcsináltam. A General-ból töröltem, a Worksheet-be bemásoltam.
    Védelmet bekapcsoltam. Működéskor jelszót kért. Mégse gomb. Run Time error.
    Lapfül,jobb klikk, kódmegjelnítés,
    Range("B23,F23,J23").ClearContents előtt sárga nyil, sor pirosan kiemelve.
    Mutasd a teljes hozzászólást!
  • Az Excel Eszközök/Bővítménykezelőben kapcsold be a 2 Analysis kezdetű bővítményt.
    Kapsz egy rakás új függvényt, és a makrót is megérti a VB.
    Mutasd a teljes hozzászólást!
  • Megcsináltam.
    Most az ellentétes feltételt kiválasztva: jelszót kér. Mégse,Run Time Error '1004'
    Az egyesített cella része nem módosítható.
    Debug, a Range("B23,F23,J23").ClearContents sor előtt sárga nyíl, sor pirosan kiemelve.

    Excel bezárása. Újra indítás után

    A másik feltételt kiválasztva:

    Jelszót kér, mégse, Run Time Error '1004'
    Range osztály Locked tulajdonsága nem áálítható be, debug,
    Az Else ágban levő sor előtt sárga nyíi, sor sárgán kiemelve.
    Mutasd a teljes hozzászólást!
  • Az egyesített cellákkal lesz a gond, ezek sok galibát okozhatnak.
    Ugyanazt a küllemet lehet elérni, ha a cellákat kijelölve a formátumnál a vízszintes elrendezésnél a kijelölés közepére opciót választod.
    Mutasd a teljes hozzászólást!
  • Átszerkesztettem a képernyőt. Eddig ez a mező egy egyesített cella volt, amibe az értékek legördülő mezőből voltak választhatók.
    Most ez egy cella, a legördülő mező nem változott.

    Az eredmény sajna változatlan.

    Ne haragudj ... Most mennem kell. Holnap benézek.
    Mutasd a teljes hozzászólást!
  • Még otthon is kínlódom vele.
    A súgóban találtam ezt. Remélem szakembernek segít.

    A Run-Time Error'1004':
    A Range osztály Locked tulajdonsága nem állítható be
    hibánál a súgóban ez van:

    Makróhiba
    A program hibát talált a makró futtatása során. A megadott metódus nem használható az adott objektumon a következő okok valamelyike miatt:

    Valamelyik argumentum érvénytelen értéket tartalmaz. A problémát gyakran az okozza, hogy nem létező objektumot szeretnénk elérni, például a Workbooks(5) függvényhívást használjuk, amikor csak három munkafüzet van megnyitva.

    A metódus az adott környezetben nem használható. Különösen Range objektumoknál követelmény az, hogy a tartomány adatokat tartalmazzon. Ha a tartomány ilyen esetekben nem tartalmaz adatot, akkor a metódus hibát jelez.

    Külső hiba történt, például a fájl írásakor vagy olvasásakor.

    A biztonsági beállítások miatt nem használható egy metódus vagy tulajdonság. Alapértelmezés szerint például nem lehet elérni a Microsoft Office dokumentumokban tárolt Microsoft Visual Basic forr Applications (VBA) kódok kezelésére szolgáló VBE objektum tulajdonságait és metódusait.

    Megbízható hozzáférések bekapcsolása a Visual Basic projektekhez:

    Válasszuk az Eszközök menü Makró, majd Biztonság parancsát.
    Jelöljük be a Megbízható források panellapon A Visual Basic projekthez való hozzáférés megbízható négyzetet.

    Szerintem csak a második bekezdés okozhatja a hibát, mert az összes többit már kipróbáltuk, beállítottuk.
    Mutasd a teljes hozzászólást!
  • Nálam hibátlanul működik, másképp nem írtam volna ide.
    Próbáld meg, hogy a

    Range("B23,F23,J23").ClearContents
    Range("B23,F23,J23").Locked = True
    Range("B23,F23,J23").Locked = False

    sorokat átírod

    Range("B23,F23,J23").Select
    Selection.ClearContents
    Range("B23,F23,J23").Select
    Selection.Locked = True
    Range("B23,F23,J23").Select
    Selection.Locked = False

    formára.

    Nézd meg a privát üzeneteidet.
    Mutasd a teljes hozzászólást!
Ez a téma lezárásra került a moderátor által. A lezárás oka: Tudástár: egy téma - egy kérdés/probléma (nem "rondítunk" bele más - pláne, már lezárt - témájába, tessék újat nyitni)!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd