To je doplnok "Analytické nástroje". Čo všetko obsahuje sa mi nechce hľadať. Vypnite ho v nastaveniach, a uvidíte, či Vám bude niečo pri práci chýbať.
Tu máte ešte prípadne aj obojstrannú verziu. Teda listy si označenú oblasť odovzdávajú navzájom.
A dal ste tam aj Modul s globálnou premennou sBunka ?
No tak to Vám Smart Filter (Rýchly filter) ani objekt Tabuľka nepôjde.
Vám teda ide vlastne o čo?
- Potrebujete iba zo zdrojových dát nájsť 1 hodnotu za splnenia niekoľkých kritérií ? To spravíme maticovým vzorcom.
- Alebo potrebujete po zadaní nejakých kritérií niekam do buniek, niekde vedľa vypísať všetky riadky zdrojovej tabuľky, ktoré vyhovujú ? To robte Rozšíreným filtrom s vhodne umiestnenými parametrami (to sa robí manuálne).
- A čo tak použiť KT ? Veď tá sa dá zobraziť takmer rovnako ako zdroj (nie vždy), a môžete použiť jej filtre.
Priložte prílohu s príkladom.
No Rýchlym filtrom...
Nemôžete mu vkladať oblasť, ale už redukované pole:
=MODE(IF(SUBTOTAL(3;OFFSET(ref. stĺp;ROW(ref. stĺp)-2;;1))=1;stĺp hodnôt))
=MODE(KDYŽ(SUBTOTAL(3;POSUN(ref. stĺp;ŘÁDEK(ref. stĺp)-2;;1))=1;stĺp hodnôt))
Takzvaný "Definovaný názov":
Karta Vzorce - Správca názvov - Nové (napísať názov) - Odkaz na (napísať vzorec alebo oblasť)
V určitých prípadoch sa dá použiť aj dynamicky meniaci sa rozsah. Napr ak v názve POCTY zmeníte vzorec na
=OFFSET(Spolu!$B$3;;;COUNTA(Spolu!$B$3:$B$500))
=POSUN(Spolu!$B$3;;;POČET2(Spolu!$B$3:$B$500))
tak keď pripíšete nový údaj, tabuľky ho do seba zahrnú.
Ale slová "v určitých prípadoch" znamenajú napr.:
-musí sa jednať o súvislú oblasť bez prázdnych riadkov, inak funkcia COUNTA/POČET2 nebude vracať požadované číslo
-pod zdrojovou tabuľkou nesmú byť žiadne iné dáta
-výsledkové tabuľky musia byť dostatočne dimenzované na predpokladaný možný počet výsledkov
-rozumne veľká zdrojová oblasť - teraz je B3:B500. Určite nedávať celý stĺpec (milión riadkov).
...
No neviem, mňa napadá len takéto zložitejšie riešenie (nesedí nám spolu zaokrúhľovanie) :
=IF(B2<>"";B2;C1+(MIN($B3:$B$366)-MAX($B$1:$B2))/(MATCH(MIN($B3:$B$366);$B$1:$B$366;0)-MATCH(MAX($B$1:$B2);$B$1:$B2;0)))
=KDYŽ(B2<>"";B2;C1+(MIN($B3:$B$366)-MAX($B$1:$B2))/(POZVYHLEDAT(MIN($B3:$B$366);$B$1:$B$366;0)-POZVYHLEDAT(MAX($B$1:$B2);$B$1:$B2;0)))
No, bez Select-u:
hárok1
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
sBunka = Target.Address
End Sub
hárok2
Private Sub Worksheet_Activate()
On Error Resume Next
Range(sBunka).Activate
End Sub
Modul
Public sBunka As String
Kvázijednoduchý maticový vzorec ? Pridal som aj list s výberom z rozbaľovacieho zoznamu.
Zatiaľ len na 1 list. Na všetky listy v zošite, je potreba myslieť ešte na výpis listov, ktoré sa odomknúť nepodarilo (pže užívateľ v odomknutom stave mohol zmeniť heslo manuálne)... Neviem, či na to budem mať večer čas. Zatiaľ toto...
Sub Zamknout_Odemknout()
Dim sPass As String
With wsData
If .ProtectContents Then
sPass = InputBox("Heslo k odemknutí listu:", "Odemknout list")
If sPass = "" Then MsgBox "Nebylo zadáno žádné heslo." & vbNewLine & "List nebyl odemčen.", vbExclamation: Exit Sub
On Error Resume Next
.Unprotect Password:=sPass
If Err.Number <> 0 Then
MsgBox "Zadané heslo není správné!" & vbNewLine & "List nebyl odemčen.", vbCritical: Exit Sub
Else
.Shapes("btnLock").OLEFormat.Object.Caption = "Zamknout"
End If
On Error GoTo 0
Else
sPass = InputBox("Heslo k zamknutí listu:", "Zamknout list")
If sPass = "" Then MsgBox "Nebylo zadáno žádné heslo." & vbNewLine & "List nebyl zamčen.", vbExclamation: Exit Sub
If sPass <> InputBox("Zadejte heslo ještě jednou:", "Potvrdit heslo") Then
MsgBox "Zadaná hesla se neshodují!" & vbNewLine & "List nebyl zamčen.", vbCritical: Exit Sub
Else
.Shapes("btnLock").OLEFormat.Object.Caption = "Odemknout"
On Error Resume Next
.Protect Password:=sPass
If Err.Number <> 0 Then
MsgBox "Při zamykání listu nastala chyba!" & vbNewLine & "List nebyl odemčen.", vbCritical, "Chyba": Exit Sub
.Shapes("btnLock").OLEFormat.Object.Caption = "Zamknout"
End If
On Error GoTo 0
End If
End If
End With
End Sub
A prečo chcete nahrádzať natívnu funkcionalitu Excelu (Revízia - Zabezpečiť hárok) ?
Píšete o liste, ale v cykle zamykáte/odomykáte všetky listy zošitu. Tak ako to je ?
Tie čísla sú vždy vzostupné po 1?
a) Ak nie, potom treba na dohľadanie nasledujúceho použiť :
=INDEX(Čísla!$A$2:$A$400;MATCH(H10;Čísla!$A$2:$A$400;0)+1)
=INDEX(Čísla!$A$2:$A$400;POZVYHLEDAT(H10;Čísla!$A$2:$A$400;0)+1)
b) Ak áno, potom stačí asi iba
=H10+1
c) Dá sa urobiť makro, ktoré sa Vás opýta na počet štítkov, a nakopíruje ich aj s číslami za Vás. Musí sa zistiť, či netreba vkladať zlomy strán, aby boli štítky správne vytlačené a nerozkladali sa "cez" stránky.
d) Alebo makro, ktoré bude postupne tlačiť zadaný počet lístkov, ale vytvorená bude len 1 stránka, v ktorej bude makro meniť čísla a posielať stránky na tlačiareň.
Iba nápad. Ale nepočíta sa s tým, že bude chýbať počiatočný alebo koncový údaj, a tiež sa počíta s tým, že sú hodnoty vzostupné, tak ako je v príklade.
=IF(B2<>"";B2;C1+(AVERAGE(MAX($C$1:$C1);MIN($B3:$B$12))-MAX($C$1:$C1)))
=KDYŽ(B2<>"";B2;C1+(PRŮMĚR(MAX($C$1:$C1);MIN($B3:$B$12))-MAX($C$1:$C1)))
EDIT: Vymenil som prílohu o 8:51, lebo som si uvedomil, že je nesprávna. :)
Od Office 2010 (vrátane) vyššie. Ak sa nemýlim.
Application.CommandBars.ExecuteMso ("PrintPreviewAndPrint")
Problém je, že makro ďalej pokračuje. Nečaká na žiadne voľby, tlač, na nič, a nevie ani o prípadnom zrušení tlače. Spomínam to preto, že treba na to myslieť.
Keď som pred rokmi hľadal nejaké riešenie pozastavenia makra na dobu zobrazenia tohto dialógu, nič dostupné ešte nebolo.
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.