< návrat zpět

MS Excel


Téma: Podmíněné formátování vs. VBA rss

Zaslal/a 4.2.2016 9:40

joke01Ahoj,
poprosil bych o radu.
Mám formulář vytvořený někým jiným a po mne se chce napsat automatické odemykání/zamykání buněk, které by mělo být vázané na barvu buňky.

Ale: V případech kdy je buňka podbarvena podmíněným formátováním, makro nerozezná její vlastnost(nebo spíš je pro něj stále nepodbarvená) a tím pádem ji nechá zamčenou.

Za každou radu, která mi pomůže předem děkuju!

Kód:
Sub Zamykani()

Dim bunka As Range
Dim oblast As Range
Set oblast = Range("A1:B2")

ActiveSheet.Unprotect Password:="000"

oblast.Select
Selection.Locked = True

For Each bunka In oblast

If bunka.Interior.Color = RGB(51, 204, 51) Then
bunka.Locked = False
End If

Next bunka

ActiveSheet.Protect Password:="000"

End Sub

Příloha: zip29843_k-testovani.zip (7kB, staženo 26x)
Zaslat odpověď >

Strana:  1 2   další »
#029850
avatar
co tohle?

převzato z webu:
http://www.cpearson.com/excel/CFColors.htm
Příloha: zip29850_k-testovani.zip (17kB, staženo 27x)
citovat
#029853
joke01
Díky snad se mi podaří to použít. Takže asi můžeme vlákno zamknout.citovat
#029871
joke01
Když dojde na formátované buňky, funkce hlásí error 13: Type mismatch v tomhle bodě:

Case xlExpression
If Application.Evaluate(FC.Formula1) Then
ActiveCondition = Ndx
Exit Function
End If

Case Else
Debug.Print "UNKNOWN TYPE"
End Select

Nenapadá ještě někoho kde může být co špatně?citovat
#029873
elninoslov
No a na ktorom presne riadku ? Nie náhodou na Evaluate ?
Akú hodnotu má FC.Formula1 ?citovat
#029902
joke01
Zasekne se přesně na Evaluate. Přiznám se, že hodnotu Formula1 právě nejsem schopen rozklíčovat.

http://www.cpearson.com/excel/CFColors.htm
kod funkce activecondition jsem se snažil pořádně pročíst včera, ale nestačím na něj.citovat
#029914
elninoslov
Žiaľ fnc z odkazu sa ani mne nedarí sprevádzkovať, hneď prvý test končí pádom fnc úplne bez debugovania chyby. Ak zadám druh formátovania "rovná sa" 1, spadne pri krokovaní v GetStrippedValue na tom MID, kde nastane záporná hodnota.

Ak by ste použil iba PF vzorcom, tak som Vám urobil maximálne zjednodušenú verziu. A mne sa zdá, že funkčnú.

Zmažte číslo 1 v A1 a uvidíte zmenu.
Příloha: zip29914_k-testovani.zip (13kB, staženo 29x)
citovat
#029915
joke01
Díky moc všem. V testech mi to funguje, na formuláři, kde má makro rozpoznávat formát tak bohužel ne(stejná chyba v evaluate).
Zkusím teď předělat ten formulář.
Ještě jednou díky a přeju hezký víkend.citovat
#029927
elninoslov
Tam môže byť veľa problémov. Najpravdepodobnejším môže byť jazyková mutácia Excelu, ďalším problémom môže byť konkrétny druh formátovania. Ja som robil iba jednoduchú verziu, lebo vidíte sám na cpearson, aké je to komplikované (a stále to nefunguje). Musíte sem dať reálnu prílohu, s reálnymi dátami a reálnym typom formátovania, ak nie, tak aspoň niekomu s CZ Excelom to pošlite mailom, lebo mne sa ďalší virtuál s CZ E teda nechce vytvárať (navyše som teraz pár dní chorý v posteli s málo výkonným bookom)...

A len zo srandy si dajte Breakpoint na
If Evaluate(Replace(FC.Formula1, ";", ",")) Then ColorCF = FC.Interior.Color: Exit For
označte FC.Formula1 kliknite pravým a Add Watch. V spodnom okne Watches v stĺpci Value 2x klik a označenú hodnotu nám sem skopírujte.citovat
#029942
avatar
Ten odkaz nikdy moc nefungoval
(Formula v podmíněném formátu je lokální - nutno převést, aktivních podmínek může být více + skládání výsledného vzhledu, ..., už si nevzpomínám co ještě)

Zkus vlastnost DisplayFormat

(nelze ji použít ve funkci)citovat
#029943
elninoslov
No veď práve to je problém na ktorý som narazil a neviem ho rozlúsknuť (ak vôbec nejako pôjde). Chcel som použiť na prevod vloženie do pomocnej bunky ako FormulaLocal a prečítanie ako Formula, čím sa vzorec preloží a dá sa potom vypočítať cez EVALUATE. Lenže zmena inej bunky vo funkcii nefunguje. Funkcia môže meniť bunku iba v jedinom prípade, ak je volaná z procedúry. Ale priamo, akonáhle by bola táto fnc volaná z proc volanej z fnc, už to opäť nefunguje. Skúsil som vytvoriť aj Class, ktorá mala meniť bunku, v nádeji, že ak je to Class (Object) tak zdedí Range so všetkým. Akonáhle ale prebieha interná procedúra v triede tak na riadku kde má zapísať do bunky, to vyvolá okamžite Class_Terminate, a bez chybovej hlášky.

Zatiaľ jediné riešenie ma napadá spúšťať výpočet tlačítkom, to fungovať bude.
Alebo mať schovaný list s bunkami s rovnakými vzorcami ako vo formátovaní.
Alebo rovnaké kontrolné mechanizmy implementovať do UDF. Teda prepísať vzorce do VBA.citovat

Strana:  1 2   další »

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje