Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  101 102 103 104 105 106 107 108 109   další » ... 122

Druhou možností je název smazat a testovat jeho existenci.To som práve chcel, ale nejak som nedokázal prísť na to, ako tú podmienku napísať 1

ad Egypt: Včera som to dal do Access a vypadlo 430557 kombinácií 1

Myslím, že správne by si mal zapísať:
MojaOblast.FormulaR1C1 = "RANDBETWEEN(" & najmensie & "," & najvecsie & ")"
stačí i:MojaOblast.Formula = "RANDBETWEEN(" & najmensie & "," & najvecsie & ")"

@eLCHa
pôvodne som tú poslednú verziu chcel napísať pomocou pomenovaných oblastí, ale trochu ma trápilo, že pokiaľ pomenovanú oblasť po tom, čo sa bunky zamknú, pred uložením zmažem, tak to následne zas hodí chybu. Takže, cez pomenované oblasti by to šlo napr. tak, že vytvorím pomenovanú oblasť pre bunku, o ktorej budem vedieť, že bude zamknutá vždy a túto oblasť postupne rozširovať o ďalšie bunky, pred uložením v nej nechať zas len tú jednu pôvodnú bunku. Pokiaľ Elly určí, ktorá bunka bude zamknutá hneď od začiatku, tak to makro môžem prepísať.

nemáš zač 1

Pamela, asi si niečo na tej jachte medzitým, čo sa nudíš, popila, pletieš si totiž riadky so stĺpcami, každopádne, pokiaľ chceš nájsť hodnotu z poslednej neprázdnej bunky a vypísať ju do A101, tak maticový vzorec:
=INDEX(A1:A100;MAX(ŘÁDEK(A1:A100)*(A1:A100<>"")))

pokiaľ poslednú hodnotu > 0, tak:
=INDEX(A1:A100;MAX(ŘÁDEK(A1:A100)*(A1:A100>0)))

Tak čo, Elly, asi nič, že? 1
Zlúčené bunky sú na figu borovú, ale keď sú pre Teba tak "dôležité" tak tuná to máš i pre prípad zlúčených buniek a doubleclickov do bunky (som zvedavý, s čím ešte prídeš) 1
V module:Option Explicit
Public MyLockedRange As Range
V kódovom okne listu:Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target <> "" Then
If MyLockedRange Is Nothing Then
If Target.MergeCells = False Then Set MyLockedRange = Target Else Set MyLockedRange = Range(Target.MergeArea.Address)
Else: If Target.MergeCells = False Then Set MyLockedRange = Union(MyLockedRange, Target) Else Set MyLockedRange = Union(MyLockedRange, Range(Target.MergeArea.Address))
End If
End If
End Sub
V kódovom okne ThisWorkbook:Option Explicit
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Application.ScreenUpdating = False
Dim SheetToProtect As Worksheet
If Not MyLockedRange Is Nothing Then
Set SheetToProtect = MyLockedRange.Parent
SheetToProtect.Unprotect ("HESLO")
MyLockedRange.Locked = True
SheetToProtect.Protect ("HESLO")
End If
Application.ScreenUpdating = True
End Sub

Ale ja si snahu predstavujem tak, že tomu budeš venovať viac, než pár minút 1
Môžem vedieť, prečo sú v súbore zlúčené bunky a nie je použité namiesto zlučovania buniek zarovnanie na stred výberu? Je nutné v zlúčených bunkách niečo prepisovať a to ešte k tomu pravidelne?

Při kliknutí na buňky
Nie, pri kliku, ale pri dvojkliku, pri kliku sa bunka nezamkne. Môžem vedieť, prečo používaš doubleclick? Trochu začínaš vymýšľať 1

O.k. tak aby to fungovalo i na doubleclick, tak trebárs takto (v kódovom okne daného listu):Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If MyLockedRange Is Nothing Then
If Target <> "" Then Set MyLockedRange = Target
ElseIf Target <> "" Then Set MyLockedRange = Union(MyLockedRange, Target)
End If
End Sub

Je-po istej úprave. Pre každý list si musíš vytvoriť samostatnú premennú podobnú mojej MyLockedRange.
Kód s príslušnou novou premennou použiť potom pre daný list (napísať ho do kódového okna daného listu).
V tom kóde BeforeSave uloženom v kódovom okne ThisWorkbook sa potom postupne odkazovať na jednotlivé listy a ich oblasti uložené v danej premennej. Trochu sa posnaž, toto by si už mala byť schopná si dorobiť, pomôžem, až keď napriek snahe, ktorú vynaložíš sama, budeš naozaj v koncoch 1

@eLCHa
opäť veľká vďaka za výborné tipy.

ad Egypt: slečna vo svojej práci na obhajobu PhD počíta kritickú cestu u projektu, mne bohužiaľ na začiatku nedocvaklo, že z pár úloh v projekte bude razom niekoľko sto a to makro na to nebolo vôbec stavané (o stovkách úloh na začiatku nepadlo slovo, moja smola, mal som to predvídať). Včera v noci som u toho už dosť zúril a uvažoval nad riešením v Access, ešte to zvážim. Tam ale budem musieť tiež vytvoriť nejaký dotaz, ktorý v cykle bude jednotlivé cesty reťaziť, manuálne je to prakticky neriešiteľné...

@Elly - na základe cennej poznámky od eLCHy, v kódovom okne ThisWorkbook teda:Option Explicit
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Application.ScreenUpdating = False
Dim SheetToProtect As Worksheet
If Not MyLockedRange Is Nothing Then
Set SheetToProtect = MyLockedRange.Parent
SheetToProtect.Unprotect ("HESLO")
MyLockedRange.Locked = True
SheetToProtect.Protect ("HESLO")
End If
Application.ScreenUpdating = True
End Sub
Pokiaľ by tá globálna premenná nefungovala korektne, tak to nahradíme pomenovanou oblasťou ako navrhol eLCHa, ale najprv sa pozrite, či to funguje takto a budeme riešiť až v prípade problému

@eLCHa
k jednotlivým poznámkam:
Používáte toto řešení a jaké máte zkušenosti?
Pravdou je, že použitie mojej premennej na úrovni modulu som netestoval na odolnosť v čase, takže neviem, či by to v prípade, že súbor bude nejakú dobu otvorený, naozaj nezačalo páchať šarapatu, ale nemám dôvod Vám neveriť, keď to zmieňujete. Použitie pomenovaných oblastí je spôsob, ktorý by to mohol vyriešiť, ďakujem. Inak, ale, ja som zas toľko kódov, aby som mohol hovoriť o nejakých skúsenostiach, nenapísal, čiže nemám nejakú zaručenú kuchárku, riešim väčšinou nejaké ad-hoc veci a pokiaľ sa mi nejaký postup osvedčí, tak ho používam.

On Error Resume Next - v tomto případě zbytečné až nebezpečné - Range má vždycky rodiče na úrovni listu
Ošetrenie chyby som použil pre prípad, kedy bude súbor otvorený, ale na dotknutý list (so zamykanými bunkami) sa pred uložením nebude zapisovať. V tom prípade by totiž objekt MyLockedRange zostal nothing a makro hodí chybu, v tomto prípade totiž ten objekt rodiča nemá.

Jestli smím no isteže smiete, ja som naopak skutočne rád, pokiaľ mi radí niekto, kto veci rozumie a som Vám vďačný.

Aby som pravdu povedal, tak presne neviem, čo znamená inštrukcia On Error GoTo 0, kam presne kód odskočí v prípade chyby, pokiaľ nikde label 0 v kóde nepoužijem?

P.S. - úloha od slečny z Egypta sa stáva pomaly mojou nočnou morou, slečna sa makro rozhodla použiť na cca 350 úloh v rámci jednoho projektu a vyzerá to špatne. Mne, než som to svoje makro prerušil, vyhodilo už 216472 záznamov (niektoré úlohy majú totiž i 40 vetvení, takže počet kombinácií narastá naozaj geometrickou radou), to je peklo. Budem to musieť napísať celé odznova nejako inak. Skúšal som Vaše a po prerušení to pre istotu nevypísalo nič (asi preto, že Vaše to vypíše do listu až po tom, čo si to celé vytvorí niekde v pamäti)

Pokiaľ Ti ide o to, spúšťať existujúci kód v nejakých intervaloch, tak na to slúži metóda Application.OnTime

@pepča: To makro som nevidel, ale malo by stačiť na posledné 2 riadky pred End Sub napísať:
Sheets("250").Activate
[B2].Select

Prípadne, aby to bolo odolnejšie na prepísanie názvu listu, zadeklarovať premennú ws a v tom prípade:
Dim ws As Worksheet 'pridať do deklarácií premenných
'na koniec kódu dopísať
Set ws = List1 'názov listu zmeň podľa toho, ako je jeho meno uvedené vo VBA editore v okne properties (Name)
ws.Activate
[b250].Select
End Sub

Bougee, nie je úplne jasné, z ktorého vzorca máš takú náramnú radosť, ale hlavne, že si nakoniec spokojný 1

Takže, nejako takto:

Do Modulu vložiť:Option Explicit
Public MyLockedRange As Range
Do kódového okna listu, v ktorom sa to zamykanie vyplnených buniek pred uložením má používať:Private Sub Worksheet_Change(ByVal Target As Range)
If MyLockedRange Is Nothing Then Set MyLockedRange = Target Else Set MyLockedRange = Union(MyLockedRange, Target)
End Sub
Do kódového okna ThisWorkbook:Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Application.ScreenUpdating = False
Dim SheetToProtect As Worksheet
On Error Resume Next
Set SheetToProtect = MyLockedRange.Parent
SheetToProtect.Unprotect ("HESLO")
MyLockedRange.Locked = True
SheetToProtect.Protect ("HESLO")
Application.ScreenUpdating = True
End Sub

Reťazec HESLO v kóde nahraď skutočným heslom, ktorým máš chránený ten list. Aby to heslo niekto úplne jednoducho nenašiel cez VBA editor, tak môžeš zaheslovať i projekt, ale pokiaľ o to niekto bude skutočne stáť, tak túto ochranu prelomí pomerne jednoduchými technikami.


Strana:  1 ... « předchozí  101 102 103 104 105 106 107 108 109   další » ... 122

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