Tak ono teoreticky to je možné zmeniť nedobrovoľne, odoslaním patričnej sekvencie kláves. Lenže treba to ošéfovať pre rôzne verzie Office, ale hlavne použiť čo najmenej klávesových skratiek, lebo sú závislé na jazykovej mutácii. Tu je príklad EN vs SK/CZ. Do horného menu sa dostane raz cez Alt+S, inokedy cez Alt+F.
Sub Doverovat_VBA()
Dim LF As String
Select Case Application.International(XlApplicationInternational.xlCountryCode)
Case 1: LF = "f" 'EN
Case 421, 420: LF = "s" 'SK/CZ
Case Else:
End Select
If LF <> "" Then CreateObject("WScript.Shell").SendKeys "%(" & LF & "){UP 2}{ENTER 2}{PGDN}{TAB 2}{ENTER}{PGUP}{DOWN 6}{TAB 3}{ }{ENTER}{TAB}{ENTER}", True
End Sub
Okrem toho SendKeys (je jedno či Shell alebo Application) trpí vo VBA NumLock bugom. To by sa muselo ešte ošetriť, aby neostal prepnutý NL. Žiadna iná metóda (ani cez Register) sa mi nepodarila rozbehať. Iba toto.
EDIT:
Jáj, a nenapísal som ešte Imh0tep-ovi: Ako príklad, ako si vynútiť zapnutie makier, Vám môže poslúžiť tento príklad, čo som sem dal pár dní naspäť.
Takže najskôr vynútiť zapnutie makier, makro skontroluje a zapne dôveru vo VBA, potom kontrola dátumu, zmazanie modulov, zobrazenie listov. Bum hotovo. Len kopec omáčky ešte, kontroly a tak. No prečítajte si, čo sme so Stalker-om písali v tom vlákne o (ne)zabezpečení Excelu.
Iba nejaký modul či konkrétne makro alebo všetky triedy a moduly ?
Mazacie makro bude v inom súbore alebo v tom z ktorého sa má mazať ?
Ide teda aj o zmenu XLSM -> XLSX ?
Ten súbor bude počas toho otvorený a používaný ?
Niektoré prípady možné asi nebudú. Napr. si myslím, že nebude možné makrom zmazať samé seba. To bude treba vymyslieť. A možno komplikovane napr. cez novú inštanciu Excelu ...
Biela farba ? No predsa E22:G29 a E12:G17.
"...třeba na více etap..." No tak moment. To si máme vysvetliť tak, že medzi môžu byť aj pracovné dni, počas ktorých sa na projekte nepracovalo? Teda, že to nie je ucelená "zelená" (nepočítam víkendy) ??? To potom počty v E nebudú sedieť. Treba ich potom zrátať inak (napr. COUNTIF). Prípadne upresnite.
Trojbodka NIE SÚ tri bodky! Máte asi v automatických opravách 3 bodky na trojbodku. Koho napadlo "skryť" hodnoty bielou farbou ??? Nemá sa počítať iba určitý mesiac? Lebo tam je presah do ďalšieho.
Inak snáď som nezabudol na niečo z toho čo ste chcel...
Inak vzorce sa dajú všelijaké urobiť, napr. vzorec konca môžete dať
=IFERROR(LOOKUP(2;1/(J18:AZ18=".");J$10:AZ$10);"")
=IFERROR(VYHLEDAT(2;1/(J18:AZ18=".");J$10:AZ$10);"")
alebo v novších Office
=XLOOKUP(".";J18:AZ18;J$10:AZ$10;"";0;-1)
A to podmienené formátovanie na 3 bodky si radšej dajte
=OR(J12="...";J12="…")
=NEBO(J12="...";J12="…")
nech máte obsiahnuté obe možnosti, keď neviete ako budú nastavené automatické opravy v jednotlivých Exceloch.
Nejaký príklad. Ale riešiť, čo všetko dokáže užívateľ posrať, sa mi nechce.
Private Sub Workbook_Open()
Sheets("Sheet1").Unprotect Password:="yourpassword"
Sheets("Sheet1").Protect Password:="yourpassword", UserInterfaceOnly:=True
End Sub
Nevýhodou je, že to heslo musí byť v tom makre uvedené. Je treba zaheslovať aj VBA modul, ale to nie je nepriestrelné. Dá sa to obabrať. Excel nie je trezor.
Sub Uloz()
With ActiveSheet
.Shapes.Range(Array("Data", "FNe", "NOWRok")).Visible = False
ThisWorkbook.SaveCopyAs "D:\pokus\" & .Range("AC1").Value & ".xlsm"
.Shapes.Range(Array("Data", "FNe", "NOWRok")).Visible = True
End With
End Sub
Stačí procedúru pre nový stĺpec upraviť obdobne, ako pre nový riadok.
Tu som Vám upravil aj ostatné procedúry, a zároveň som sa snažil zmeniť vzorce tak, aby ich funkčnosť prežila aj mazanie riadkov a stĺpcov.
Skúste toto.
PS: Prílohu XLSM musíte zabaliť do ZIP.
A zadávate určite Formula2 ?
Nemôžete tabuľku naformátovať ako Tabuľku (objekt) ? Potom sa Vám vzorce doplnia samé.
Ak priložíte nejakú anonymizovanú prílohu, skôr sa dočkáte riešenia.
To je kvôli novému spôsobu vyhodnocovania polí (matíc). Budete to musieť asi vkladať v EN verzii a do Formula2
Worksheets("Hárok1").Range("L6").Formula2 = "=TEXTJOIN(""; "",TRUE,IF(N6:AS6>0,N2:AS2,""""))"
EDIT: Kolega ma predbehol. Ja preferujem vždy EN vzorce.
Zaškrtnutie na to nemá vplyv. To sa dá testovať bez odškrtávania. Záleží na tom, či majú byť vo výsledku zaškrtnuté alebo nie. Testuje sa najskôr, či bunka obsahuje nejakú hodnotu a zároveň je to číslo, a ešte navyše nie je číslo zapísané vzorcom. Až potom sa bunka zmaže. Teraz je na konci Select pre ukážku, tak si tam po overení aktivujte ten ClearContents.
No a to zmazanie CheckBoxov si aktivujte v prípade potreby aktivovaním riadku
rB.Offset(0, 3).ClearContents
Sub Smazat()
Dim rB As Range, rDel As Range, i As Long, B()
Set rB = Worksheets("List1").Range("B2:B25")
B = rB.Value2
' rB.Offset(0, 3).ClearContents 'stačí zmazať stĺpec E, prázdna bunka je pre CheckBox ako FALSE/NEPRAVDA, ale v tomto prípade to asi netreba
For i = 1 To UBound(B, 1)
If LenB(B(i, 1)) <> 0 And IsNumeric(B(i, 1)) Then 'je niečo v bunke a zároveň je to číslo?
If Not rB.Cells(i).HasFormula Then 'a ešte k tomu to nie je vzorec
If rDel Is Nothing Then Set rDel = rB.Cells(i) Else Set rDel = Union(rDel, rB.Cells(i)) 'tak pridaj bunku do oblasti na zmazanie
End If
End If
Next i
If Not rDel Is Nothing Then rDel.Select 'ClearContents 'zmaž oblasť na zmazanie
End Sub
OK, dnes už na to prdím, ale zajtra to dorobím. Skúšal som ešte prerobiť to vyfarbovanie riadku/stĺpca z makro verzie, ktorá zruší Undo, na verziu s Podmieneným formátom. Neviem ale či to má zmysel, páč to Undo zruší iné makro tak či tak :(.
Každopádne mi teda ešte povedzte, či sa má do ComboBoxu načítať teda to čo je označené príznakom "B", alebo to čo je v reálnej tabuľke vyfiltrované. To sú 2 rozdielne prístupy k dátam. Teraz to mám vlastne hotové na to "B".
Z Vašej nezrozumiteľnej odpovede som vyrozumel toto:
-Odpovedám si sám, áno, formulár má slúžiť aj na úpravu už zaznamenaného záznamu, nielen na vloženie nového.
-Mne to "filtrovanie" funguje, ale môže nastať problém v iných verziách Office/VBA, že nevyhodnotí 1="1" tak, ako očakávate.
-Vy teda potrebujete hľadať záznam zo spodu, teda najnovší, a nie zvrchu najstarší.
-Bude potrebné ešte jedno tlačidlo na potvrdenie úpravy. Teraz "Ulož záznam" je na pridanie záznamu.
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.