Excel makróval színezés aktív munkalapra

Excel makróval színezés aktív munkalapra
2017-05-17T12:57:49+02:00
2017-05-18T11:36:10+02:00
2022-12-04T13:55:36+01:00
Yoindulat
Sziasztok!
A problémám a következő:
Több munkalapom van, amiken fix helyeken van egy-egy színminta, meg a hozzá tartozó gomb (jelen esetben a b9-es cellában), viszont a lenti makró mindig csak egy bizonyos (egyébként változik, hogy melyik, a rendszerre még nem jöttem rá) munkalapon működik, és nem úgy mint szeretném.

Sub cella_b9()
Selection.Interior.Color = ActiveSheet.Cells(9, 2).Interior.Color
End Sub

A makró elvileg az aktív munkalapon színezné ki a kijelölt cellákat a mintául szolgáló cella alapján, azonban ha nem találom meg a működő lapot, run time error '1004' hibával leáll és nem csinál semmit.

Mi az az apróság, amit elfelejtek? A vonatkozó gombhoz hozzá van rendelve a fenti makró, mást mit kellene még állítanom?
Előre is köszönöm a segítséget!
Mutasd a teljes hozzászólást!
Szia!

Szerintem mégiscsak a zárolás beállításainál lesz a gond. Amikor zárolod, a cella formázást meg kell engedned, ez alapból le van tiltva.

Sheets(x).Protect AllowFormattingCells:=True

Persze ezt kézzel zárolásnál is meg lehet tenni  a megjelenő párbeszéd panelen.
Üdv.
Mutasd a teljes hozzászólást!

  • Szerintem ne az aktív munkalaphoz "kösd" hozzá az eseményt, hanem adj meg "általános" hivatkozást...
    Persze, ha jól sejtem...
    Mutasd a teljes hozzászólást!
  • Ha jól sejtem, nem azzal van a baj, hogy honnan veszi a mintát (akár munka1-ről, fix helyről is vehetné) a problémám valahol ott lesz, hogy a selection-nel dolgoznék, viszont azt meg nem engedi, hiába van kijelölve az a munkalap, amin módosítanék.

    A javaslatod alapján interior.color lenne a megoldás, viszont ott meg ugye object-et hiányol. Vagy van valami más mód az általánosításra?
    Mutasd a teljes hozzászólást!
  • SORRY, de nincs office-m, ezért konkrét megoldást adni nem tudok, így marad a keresés (másik) számodra is...
    Mutasd a teljes hozzászólást!
  • Köszönöm a segítséget, a keresésen azonban már túl vagyok. :) A fenti példákat is átnéztem, de vagy én vagyok vaksi, vagy tényleg nem tartalmaznak utalást a problémám megoldására. ;)
    Mutasd a teljes hozzászólást!
  • Szia!

    Az a kérdés, hogy a "szÍnmintád" egyetlen munkalapon található, vagy minden munkalapon ott van.
    Ha csak egyetlen munkalapon pl. a munka1-en, akkor megoldás lehet, hogy azt a cellát, amiben a minta van, beteszed egy változóba.

    dim mintaszin as range Set mintaszin=Sheets("Munka1").Cells(9,2) ' figyeld meg, hogy konkrétan hivatkozik az adott cellára Ezután bárhol vagy, a mintaszin objektumot használod: Selection.Interior.Color=mintaszin.Color Vagy a szinmintát beleteszed egy változóba és azt használod: Dim szinminta as double szinminta=Sheets("Munka1").Cells(9,2).Interior.Color Selection.Interior.Color=szinminta


    Üdv.
    Mutasd a teljes hozzászólást!
  • A színminta ott van minden munkalapon, de akárhogy is csavarom, elvileg működnie kellene a
    selection.interior.color=xyz értékadásnak. Ennek ellenére folyamatosan, még fix értékkel is ugyanazt a hibaüzenetet kapom. :(
    Ha nem egy bizonyos munkalapon állok, semmit nem hajlandó csinálni. A munkalapokon a gombok ugyan másolva vannak, de ugyanazokat a függvényeket hívják. Az elképzelésem szerint az aktuálisan kijelölt cellákat formázná a kód. Mivel ugye ez csak az aktív lapon lehetséges (sima mezei felhasználó tallóz a lapok között, kijelöli a színezni kívánt cellákat, aztán a gombot nyomja) nem gondolnám, hogy bármi úton módon még külön valami paramétert kellene állítanom, hogy melyik lapon áll a felhasználó.
    Ugyan a munkalapok védve vannak, de a formázni kívánt cellák nincsenek védve, szabadon kijelölhetőek, formázhatóak. Ezen kívül viszont az egyébként vmiért engedett munkalapnak ugyanazok a lapvédelmi beállításai.

    Válaszírás közben eszembe villant és találtam egy részmegoldást:
    Ha a lapvédelmet feloldom, színezés után visszateszem, az aktuális lapra működik.

    ActiveSheet.unprotect
    Selection.Interior.Color = ActiveSheet.Cells(9, 2).Interior.Color
    ActiveSheet.Protect

    Viszont nem szeretném a feloldás jelszavát a kódba illeszteni, jelszó meg nélkül meg csak a fapados módosítási/elbarmolási próbálkozásoktól véd. Más ötlet, megoldás esetleg?
    Mutasd a teljes hozzászólást!
  • Szia!

    Szerintem mégiscsak a zárolás beállításainál lesz a gond. Amikor zárolod, a cella formázást meg kell engedned, ez alapból le van tiltva.

    Sheets(x).Protect AllowFormattingCells:=True

    Persze ezt kézzel zárolásnál is meg lehet tenni  a megjelenő párbeszéd panelen.
    Üdv.
    Mutasd a teljes hozzászólást!
  • Nem kell feloldani, viszont ne kézzel, hanem egy ilyen kóddal védd le:
    ActiveSheet.Protect Password:="xxxx", UserInterfaceOnly:=True
    A többi esetleg szükséges paramétert nézd meg, ha kell. Ezt a kódot persze a jelszó miatt ne írd bele a kimenő fájlba, hanem tedd el magadnak.
    Mutasd a teljes hozzászólást!
  • Szia!

    Sajnos az Excel a UserInterfaceOnly beállítását nem őrzi meg bezáráskor, ezért minden megnyitáskor meg kell ismételni a  zárolásokat  . Ahhoz viszont kell a jelszó a makróba.
    Viszont ha beleteszi a cellaformázás engedélyezést zároláskor, akkor nem kell feloldani a zárolást a formázáskor.

    Üdv.
    Mutasd a teljes hozzászólást!
  • Nyilván nem szeretné engedélyezni a cellaformázást sem...

    Viszont le lehet védeni a projektet is, és akkor bátran beleteheti a jelszót.
    Mutasd a teljes hozzászólást!
  • Köszönöm a segítséget, a legegyszerűbb valóban engedélyezni a formázást (szükséges lehet az egyéb formázás is, úgy mint szegélyek állítása, tartalom módosítása). Az alapproblémám oka meg ugye az volt, hogy a lapvédelem miatt nem engedte módosítani a cella hátterét, mivel alapértelmezettként tiltja, a protectem meg nem tartalmazta ezt a kitételt.
    Mutasd a teljes hozzászólást!
  • Magam úgy szoktam ezt megoldani, hogy levédem jelszóval magát a makróprojektet, így pedig már nyugodtan betehetem a jelszót, ami a levédést/feloldást intézi, ha kell. Sajnos néha kell... Azt pedig nem szívesen engedem, hogy a felhasználók átformázzák a cellákat, mert minden ügyetlenségre képesek!
    Mutasd a teljes hozzászólást!
  • Köszönöm a tippet, ez is jó módszernek tűnik.
    Viszont jelen táblázatnál szükséges a formázás, úgyhogy így kell maradjon. ;)
    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