Pak tam jsou také různé další možnosti jako je Hodnoty, Formáty, Komentáře, Šířk sloupců, Hodnoty a formáty čísla, .... Pokud nezatrhneš (nevložíš) Vzorce tak zůstanou jen hodnoty.
Podmíněné formátování se přenáší s Formátem
Řelk bych, že je to přesně to co potřebuješ.
Jeza.m Ti dal dobrý odkaz a pravděpodobně Ti celé makro napíše a okomentuje.
Já osobně spíš preferuji "nápovědu". Pokud se chceš opravdu něco pro sebe naučit a pochopit, musíš se do toho aktivně zapojit. Makra umožňují krokování a lze takto vysledovat co se vlastně po jakém příkazu děje (až na pár vyjímek).
Stáhni si ten soubor ve fóru a zkus si vytvořit vlastní návrh, není to složité.
Pokud pak budeš mít problémy, popiš je a dej sem Tvůj sešit k dispozici.
Vím, že každý nějak začínal. Tyto věty nejsou myšleny nijak zle (vlastní zkušenosti).
Sice nejsem zase tak starý, ale hodně už pamatuji.
Co použít "Kopírovat" (celý list) a pak "Vložit jako" (do nového listu) a vybrat Hodnoty.
Popis makra je snad dost výstižný.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
sl = 1 ' požadovaný sloupec v tomto případě 1 (tedy A)
rd_odkud = 3 ' číslo řádku odkud se má kopírovat
rd_kam = 5 ' číslo řádku kam se má kopírovat
sl_kam = 2 ' číslo sloupce kam se má kopírovat (tedy B)
' pokud jsi na prvním řádku požadovaného sloupce (sl)
If ActiveCell.Column = sl And ActiveCell.Row = 1 Then
' výběr buněk pro kopírování
Range(Cells(rd_odkud, sl), Cells(ActiveSheet.UsedRange.Rows.Count, sl)).Copy
' nastavení se na buňku kam kopírovat
Cells(rd_kam, sl_kam).Select
' vložení
Paste
' zrušení označení oblasti pro kopírování
Application.CutCopyMode = False
' nastavení kurzoru na druhý řádek vybraného sloupce
Cells(2, sl).Select
End If
End Sub
To marficek119:
Pokud si nejseš jist základními věcmi, pak s registry raději neexperimentuj.
Vložení do registru musí být na začátku (při otevření sešitu) - otestovat, zda je klíč v registru zapsán, pokud ne tak zapsat.
Načtení pak následuje a pokud je splněna podmínka uzamčení - uzamknout list.
To Jeza.m:
Co se týká DeleteSetting
DeleteSetting "Aplikace", "Demo", "Klíč" - vymaže pouze "Klíč" z registru;
DeleteSetting "Aplikace", "Demo" - vymaže celou sekci "Demo";
DeleteSetting "Aplikace" - vymaže celou větev "Aplikace" - tedy vyčistí po sobě.
Lon
Moc nerozumím pojmu:
dojde automaticky k nakopírování všech hodnot ve sloupci a vložení všech hodnot jinam (třeba do sloupce začínajícího v buňce B5).
Pokud je myšleno celý sloupec, pak je to "neřešitelný" problém. Bude totiž chybět 5 řádků pro nakopírování.
Nějaký lepší příklad nebo ukázka by nebyla.
Možné řešení:
sl = 1 ' požadovaný sloupec v tomto případě 1 (tedy A)
rd_kam = 5 ' číslo řádku kam se má kopírovat
sl_kam = 2 ' číslo sloupce kam se má kopírovat (tedy B)
If ActiveCell.Column = sl And ActiveCell.Row = 1 Then
Range(Cells(1, sl), Cells(65536 - rd_kam, sl)).Copy ' výběr buněk pro kopírování (celý sloupec A mínus počet řádků)
Cells(rd_kam, sl_kam).Select
Paste
Application.CutCopyMode = False
Cells(2, sl).Select
End If
Celou proceduru pak vložit na daném listu do procedury Worksheet_SelectionChange(ByVal Target As Range)
To Jeza.m:
Souhlasím, upozorňoval jsem na automatické uložení.
If Date > Cells(1, 256) + Cells(2,256) Then
List1.Unprotect "heslo" '...odemknout list s heslem "heslo" - můžeš nastavit cokoliv
Cells.Locked = True '...zamknout buňky
List1.Protect "heslo" '...zamknout list s heslem "heslo" - můžeš nastavit cokoliv
ActiveWorkbook.Save ' uložení sešitu se změnami
End If
Je samozřejmostí, že takovéto testy by se měly dělat při otvírání sešitu.
Mj. s těmi registry to není špatné, čekal jsem, že to vykoumáš.
Existuje taky něco jako DeleteSetting(....)???
Díky "bláznovi" Jeza.m, který radí co může.
Já z těch jeho příspěvků také čerpám a je to super.
Kéž by bylo více takových "bláznů".
To Jeza.m: vydrž!
Tak např. skrýt poslední sloupec v sešitu (což je 256-tý) a do druhého řádku vložit počet dní pro testování.
Při prvním průchodu nebude datum obsahovat nic.
Tedy buňka IV1 bude prázdná a buňka IV2 bude obsahovat počet dní. Sloupec IV skrýt, uzamknout sešit heslem a vložit makro.
If Cells(1, 256) = Empty Then
List1.Unprotect "heslo" ' odemkutí listu heslem "heslo" k provedení změn
Cells(1, 256) = Date ' vložení aktuálního data
List1.Protect "heslo" ' uzamčení sešitu heslem "heslo"
End If
If Date > Cells(1, 256) + Cells(2,256) Then
List1.Unprotect "heslo" '...odemknout list s heslem "heslo" - můžeš nastavit cokoliv
Cells.Locked = True '...zamknout buňky
List1.Protect "heslo" '...zamknout list s heslem "heslo" - můžeš nastavit cokoliv
ActiveWorkbook.Save ' uložení sešitu se změnami
End If
Ovšem pokud si někdo stáhne sešit znovu zase mu bude fungovat určitý počet dní.
Samozřejmostí je i zaheslování projektu! Jinak si to každý otevře a heslo ví.
Sice nevidím důvod odemykat list se vzorci, ale budiž.
Pokud by byly uzamčeny buňky se vzorci a volné jen ty, do kterých může uživatel zapisovat data, pak lze vše vyřešit zápisem datumu při otevření sešitu do určité "skryté" buňky na listu a ten pak porovnávat.
Poté zamknout všechny buňky v listu (Cells.Locked=True) a automaticky ukládat sešit při uzavření.
Takhle to nepůjde. Excel neumí takto jednoduše uložit vybrané sloupce do txt souboru.
Lze to vyřešit celkem elegantně, kde si vytvoříte list s Vámi vybranými sloupci (tedy A, C a E) a tento list pak pomocí dialogu uložíte do txt.
Pro Vaše makro přiřadíte:
jmenoTXT = "prevod" 'jméno listu ve kterém jsou vybrané sloupce - tento list samozřejmě musíte vytvořit
jmeno = ActiveSheet.Name
jmenoSouboru = Application.GetSaveAsFilename(fileFilter:="Text Files (*.txt), *.txt")
If jmenoSouboru <> False Then
Sheets(jmenoTXT).Select
ActiveSheet.SaveAs Filename:=jmenoSouboru, FileFormat:=xlTextMSDOS, CreateBackup:=False
Sheets(jmeno).Select
End If
Nejjednodušší způsob je nahrát si makro, které to provede (Příkaz Nahrát makro) a pak jej přiřadit k tlačítku formuláře.
Range("J4:J6, E14:G16, J14:J16, C18:C36, G18:J36").Select ' vybere Vámi zadanou oblast buněk
Selection.ClearContents ' vymaže data
Řešení je v příloze.
Předpokládám, že jednotlivé druhy budou zapisovány do řádků, proto je výhodnější vyhodnotit každý řádek na konci výpisu.
1. vyhodnocení řádku
2. přenesení údajů do dalšího listu.
Zkusím nakopnout.
možné řešení:
1. vyhledat nejmenší hodnotu v dané oblasti (funkce MIN)
2. tuto hodnotu vyhledat v daném řádku a uložit pozici sloupce (funkce POZVYHLEDAT)
3. uložit z horního řádku (jména obchodů) název (funkce POSUN)
Myslím, že vlastní učení pomůže více než jen někým napsat vzorce a ono to nějak funguje.
Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.