To je sice hezké, ale co když nebudou spuštěna makra???
Ještě mne napadla jedna myšlenka.
Skrýt všechny listy, zamknout projekt heslem a v proceduře Workbook_Open pak potřebné listy zviditelnit. Samozřejmě pak udělat makro i na proceduru Workbook_BeforeClose, která by zase všechny listy skryla a uložila sešit. Proceduru Before_Save bych zde nepoužil, protože při ukládání by se muselo zakrývat a pak zase odkrývat listy. Pouze ošetřit možnost Uložit jako - tedy znemožnit tuto funkci.
Pokud totiž uživatel nespustí makro a nezná heslo, pak se mu nic nezobrazí a bude odkázán pouze na spuštění makra.
Možná blbost, ale mohlo by to pomoci. Pro obyčejné uživatele určitě ano.
Samozřejmě Pokiho myšlenka je velice vhodná pro kontrolu přístupů. Při omezení na počet přístupů (otevření sešitu) pak místo datumu dát počet otevření a při každém novém otevření sešitu snížit čítač o 1. Pak využít vyhodnocení >0 lze ještě otevřít, 0 poslední otevření a dále nic, <0 lze otevřít kdykoliv (bylo zadáno správné heslo).
Lon.
opravit si text cs="........" a us="........"
např.
cs="="
us=" "
pro případ, že chceš = nahradit znakem mezera
Napsat funkci:
Function UkazVzorec(Cell As Range) As String
UkazVzorec = Cell.Formula
End Function
Function UkazVzorecCesky(Cell As Range) As String
UkazVzorecCesky = Cell.FormulaLocal
End Function
a do příslušné buňky vložit:
=UkazVzorecCesky(bunka)
nebo=ukazvzorec(bunka)
Nevím, zda jsem pochopil správně Tvůj dotaz, ale vzorec Tebou uvedený je má pár chyb.
=KDYŽ(JE.CHYBHODN(VYHLEDAT(B1;Data!B:B)=B1);"x";SVYHLEDAT(A5;Data!A:D;4;NEPRAVDA));
1. problém je v relativní hodnotě B1 [uvedl bych zde $B$1 - VYHLEDAT($B$1;Data!B:B)=$B$1)]
2. výraz SVYHLEDAT vrátí vždy chybu pokud porovnáváš A5 s datumem [správně SVYHLEDAT(A5;Data!C:D;2;NEPRAVDA)] - pak vrátí hodnotu ze sloupce D listu DATA
Pokud se jedná o dva sešity, jak uvádíš, pak nezapomeň na to, kde tyto sešity jsou uloženy. Pokud se jedná o listy v jednom sešitu, pak není potřeba nic dalšího měnit.
celý vzorec bych viděl:
=KDYŽ(JE.CHYBHODN(VYHLEDAT($B$1;Data!B:B)=$B$1);"x";SVYHLEDAT(A5;Data!C:D;2;NEPRAVDA))
Ovšem musí se také vyhodnotit chybová hodnota funkce SVYHLEDAT, popř omezit hledání na neprázdnou hodnotu buňky A v listu Form (podmínkou KDYŽ). To ale již zvládneš.
Add 4) - vytvoření seznamu - zkopírovat buňky ve kterých jsou uvedeny názvy institucí do nově vytvořeného listu. Označit celou oblast zkopírovaných hodnot a použít funkci Odebrat stejné.
Pojmenovat záhlaví dle zadání.
Pro vytvoření počtu účastníků z jednotlivých institucí použít funkci COUNTIF.
Add 5) - Seřazení předpokládám zvládnete, součet všech účastníků snad také a počet institucí - napovím, že lze využít stejnou funkci (COUNTIF) jen musíte přemýšlet o podmínce.
Lon
Vzorec pro výpočet Velikonočního pondělí:
=(KČ(("4/"&C4)/7+MOD(19*MOD(C4;19)-7;30)*14%;)*7-6)+1
; kde buňka C4 obsahuje rok, pro který chcete výpočet provést.
Lon
Navrhoval bych řešení od Vasey, malinko poupravené
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cisla$
Dim radek!
radek = 3
For radek = 3 To UsedRange.Rows.Count
cisla = Range("d" & radek)
If cisla <> Empty Then
Range("e" & radek).FormulaR1C1 = "=" & cisla
Else
Range("e" & radek) = Empty
End If
Next radek
End Sub
Toto makro vložit do příslušného listu, má jedinou nevýhodu - při velkém počtu dat může brzdit výpočet
Lon
Zvolil bych funkci vyhledání souboru
záleží na verzi MSO protože to co funguje v MSO 2003 nefunguje v MSO 2007
Dát do cyklu a skrýt podle prázdné buňky
For i = 1 To 50 ' pro 50 řádků od 1
If Cells(i, 1) = Empty Then ' buňka ve sloupci A je prázdná?
Rows(i).Hidden = True ' ano, skryj řádek
End If
Next i
Lon
For n = 1 To 200
Cells(1, 1) = n
ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
Next
kde Cells(1,1) je buňka A1
pak bych zkusil zpodmínkovat formou vložení do
Sub UserForm_Activate()
nazev_prvniho_textboxu.Visible = True
nazev_druheho_textboxu.Visible = False
.
.
.
.
nazev_posledniho_textboxu.Visible = False
..........
Tímto se zobrazí pouze první textbox.
Při vyplnění (změně) prvního textboxu, tedy do
Sub nazev_prvniho_textboxu_Change()
zadat podmínku pro vyhodnocení zda je prázdný či nikoliv a
nazev_druheho_textboxu.Visible=True
.......... atd pokračovat až do konce.
Možná po někoho krkolomný popis, ale bez konkrétního zadání a ukázky se "vaří" jen těžko.
Lon
No ale vždyť to funguje jak má???
Co tam je za problém?
Datumy říjen tam nejsou a ani nemohou být zpracovány
ZNOVU OPAKUJI:
hodnoty do sloupce K (tedy 1) zapisuje makro. To je z důvodu nenačítání duplicitních údajů.
Tedy při zadávání dat je nutné ponechat sloupec K nevyplněný!!!
Toto jsem popisoval již několikráte výše
Lon
Aha, domnívám se, že jsi určitě vyplnil i sloupec K při zadání údajů. Ten slouží pouze pro to makro aby nedocházelo k duplicitám, tak jak jsem psal výše (proč ten sloupec využívá makro).
Samozřejmě pokud v daný den nebude sešit otevřen, pak se nic nezapíše.
stačí zaměnit
If Date = CDate(datum) Then
za:
If Date >= CDate(datum) Then
pak při otevření se zapíší všechny starší nezapsané hodnoty.
Vycházel jsem z původního zadání
Lon
To je velice zvláštní, teď jsem povedl pouze zkopírování pár položek a zadal datum říjen a změnil jsem systémový čas.
Vše funguje naprosto v pohodě.
Kontroluje se pouze odpovídající den, tak jak bylo popsáno v zadání.
Nevím co více by se Vám mělo dále kopírovat????
Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.
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.