Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  2 3 4 5 6 7 8 9 10   další » ... 36

Pokud je smyslem celé akce pojistka proti ztrátě provedených změn za období delší pěti minut v důsledku nechtěného přerušení práce se sešitem, mohlo by pomoci nastavení času pro automatické obnovení:
Application.AutoRecover.Time = 5
Při novém otevření sešitu po výpadku se nabídne stav sešitu, který není starší než pět minut před výpadkem. Toto nastavení je možné provést také pomocí Soubor/Možnosti/Uložit/Ukládat informace pro automatické uložení

Zkuste změnit své "ThisWorkbook.Save" na "ActiveWorbook.Save". Pokud jsem správně pochopil smysl akce, mělo by to pomoci.

Před pár týdny byl na fóru dotaz, kvůli kterému jsem použil dvě tlačítka Start a Stop pro spuštění a zastavení makra. Jeho vtip je v tom, že se v prováděcím cyklu makra Start nachází DoEvents. Tento příkaz dovolí makru Stop, aby ukončilo průběh cyklu v makru Start. Další stisk tlačítka Start obnoví chod prováděcího makra. Myslím, že ukázka tohoto chování dobře dokumentuje, jak to funguje.

Řešení pomocí událostní procedury s tím, že lze obě hodnoty nazávisle na sobě měnit tak, že se ta druhá hodnota přizpůsobí - viz příloha.

Mně na to mazání funguje velmi prosté makro:

On Error Resume Next
ActiveSheet.UsedRange = ""

Možná teď napíšu tajemství, ale opravdu stačí buňky vymazat (ne odstranit), aby se UsedRange zmenšila. Jen musím po vymazání tu novou UsedRange aktivovat, např. dotazem přes Immediate Window. Na svém testovacím příkladu jsem to provedl následovně:

range("A100:E1048576")=""
?activesheet.usedrange.address
$A$1:$E$99

Uložený sešit se z 37 MB scvrkl na 12 kB. Je ale pravda, že postup, který doporučil elninoslov, by měl poskytnout stejný výsledek.

Možná hledáte velmi jednoduchou příčinu pro velikost 80MB, která vznikla ze sešitu s velikostí 160 kB. List v E-2003 má 64 kilo řádků, v E2013 jich je 1 mega. Známým zlozvykem v starších excelech byla aktivace vzorců pro celé sloupce.
Udělal jsem malý pokus s prázdným sešitem. Prvních pět celých sloupců v listu E-2016 jsem naplnil vzorcem =Řádek() a sešit jsem uložil. Výsledkem je soubor o velikosti 37 MB!
Pokud ve svém sešitu najdete listy, na kterých po Ctrl-End skočíte na řádek milion a něco, pak jste u jádra pudla.
V takovém případě smažte nepotřebné řádky se vzorci a sešit uložte. Změnu velikosti souboru najdete v prohlížeči.

Chyba je v adrese, kterou jsem uvedl. Správný odkaz je
www.jkp-ads.com/Download.asp.
Nestudoval jsem doplněk od veny, jen jsem vycházel z popsaných příznaků. Pokud jde o popsanou vadu, pak ta se projevuje jak v E2013, tak v E-2016. V E-2007 a v E-2010 mi vše funguje, jak má. Jakmile zavolám doplněk z vyššího Excelu (13 nebo 16), začne se mi uživatelský formulář skrývat pro sešit, který je právě On Top. Procedura, uvedená v odkazu, toto nechtěné chování odstraňuje.

Domnívám se, že jde o stejnou příčinu, kvůli které mi přestaly fungovat všechny moje doplňky, postavené na komunikaci přes uživatelský formulář. Po mnohaměsíčním tápání jsem náhodně narazil na vysvětlení této záhady včetně jejího řešení na adrese www.jkp.com/Download.asp. Jde o změnu systému zobrazování v Excelu z MDI na SDI, která proběhla při zavedení Excelu ve verzi 2013 a která zřejmě zůstala v hlubokém utajení. S výjimkou citované adresy jsem o dané téma nikde nezavadil.

Poněkud kuriozní přání! Pro potřeby psaní vzorců existují funkce listu ŘÁDEK() a SLOUPEC(), což jsou čísla řádku a sloupce aktuální buňky. Je to, na co jste se ptala?

Pokud dokážete na ručně vyplňovaném listu identifikovat ty listy se vzorci, kterých se data z prvního listu dotýkají, můžete si vytvořit seznam takových "aktivních" listů. Tomuto seznamu pak můžete podřídit, zda se má list se vzorci tisknout, nebo ne.

Tak dlouhé čekání na odpověď tady není obvyklé. Proto odpovídám. Dalo by se to napsat stručněji, ale kvůli čitelnosti to je také okomentované. Proceduru KopieListu umístěte do standardního modulu ve zdrojovém sešitě.
Sub KopieListu()
Dim Venku As Workbook
Application.ScreenUpdating = False
' příprava přijímajícího sešitu
Workbooks.Open "S:\složka\nazev souboru.xlsm"
Sheets("TOTAL").Select
Range("A1").Select
Set Venku = ActiveWorkbook
' návrat do zdrojového sešitu pro obsah listu
ThisWorkbook.Activate
Sheets("SEND").Select
Cells.Copy
' přenos dat do přijímajícího sešitu
Venku.Activate
ActiveSheet.Paste
Range("A1").Select
' uložení a zavření přijímajícího sešitu
With Venku
.Save: .Close
End With
' úklid ve zdrojovém sešitě
ThisWorkbook.Activate
Application.CutCopyMode = False
Range("A1").Select
' zpráva o provedení
MsgBox "Přenos byl proveden"
End Sub

Podstatu vašich problémů vidím v tom, že neumíte rozlišit práci s objekty ThisWorkbook a ActiveWorkbook.
Pokud současně otevřete víc sešitů, pak každý z nich vidí (a může použít) makra ze všech otevřených sešitů. Makro, ze kterého se volá ThisWorkbook, bude spolupracovat s daty toho sešitu, ve kterém je umístěno dané makro. Makro, ze kterého je volán ActiveWorkbook, bude pracovat s daty toho sešitu, který je právě aktivní. Když není sešit uveden, rozumí se ActiveWorkbook. Toto rozlišení je zásadní např. pro psaní doplňků (a samozřejmě i pro váš případ). Při jednom otevřeném sešitu ThisWorkbook a ActiveWorkbook jsou totožný objekt.

V první řadě bez ukázky nevím, proč by to už nešlo změnit. Pokud to opravdu nejde (o čemž si u buněk, určených pro ukládání dat, nejsem vůbec jistý), pak rozdělení a následné sloučení buněk představuje několik málo příkazů VBA. Žádný jiný fígl pro ten účel neznám.

Pokud jde pouze o upozornění, kdy se má provést odstavení, měl by fungovat vzorec v pomocném sloupci B (k hodnotám ve sloupci A, počínaje druhou hodnotou ve sloupci A). Stačí rozkopírovat vzorec, zapsaný do B2:

=KDYŽ(CELÁ.ČÁST(A1/1000)<>CELÁ.ČÁST(A2/1000);"ODSTAVIT";"")
=IF(INT(A1/1000)<>INT(A2/1000);"ODSTAVIT";"")

Vnořené rozhodování funguje jednoduše: místo přímé hodnoty pro větev ANO (nebo NE) vložte kompletní vnořenou funkci KDYŽ, a nezapomeňte řádně závorkovat!


Strana:  1 ... « předchozí  2 3 4 5 6 7 8 9 10   další » ... 36

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Aktivní diskuse