1x



EXCEL - Automaticke vložení DATUMU

Od: Datum: 20.08.13 11:49 odpovědí: 14 změna: 05.09.13 15:28

Dobrý den,

hledal jsem, ale nenanšel, proto se ptám:
Jak automaticky např. do buňky A1 vložit AKTUÁLNÍ DATUM, když do buňky B1 napíšu nějakou hodnotu?
Byl bych rád, kdyby to šlo bez makra. Pokud použiju něco jako =KDYŽ(B1<>"";DNES();0) , tak se datumy vždy přepočítají, podle aktuálního data a nezůstane datum při vložení.

Snad je to srozumitelné :)
Díky,

PP


Seznam odpovědí:
 
moment čekejte prosím, probíhá přenos dat...
Zobrazení struktury odpovědí v otázce
Skrytí struktury odpovědí v otázce
Zobrazení struktury odpovědí v otázce

 

Odpovědi na otázku:
Datum: 20.08.13 15:06
avatar

Zkus se podivat na tohle: http://office.microsoft.com/e…day-function-HP010062297.aspx Mohlo by to fungovat.

Ohodnoceno: 0x
 
Od: ppcko*
Datum: 20.08.13 16:52

Díky za snahu, nicméně tohle problém neřeší. (zde v ČJ: http://office.microsoft.com/c…/funkce-dnes-HP010062297.aspx )
Nějaké jiné návrhy?

Datum: 20.08.13 21:43
avatar

Bez makra to nejde.

Můžete mít něco na způsob tohoto, záleží na tom, jak a kdy to chcete spouštět (ručně, pokud tam ještě datum není, pokud se změní B1, ..):

Sub datum()
Range("A1").Value = Date
End Sub
Ohodnoceno: 0x
 
Od: ppcko*
Datum: 21.08.13 12:10

Toho jsem se bál :)
Ale tak dobře, pokud to opravdu nejde, jak to tedy udělat makrem, když potřebuju, aby to takto fungovalo u více řádků?
Tabulka vypadá takhle a jde mi o to, aby stačilo vyplňovat pouze zelené pole:
http://o7.no/1aqKOTw

Díky!

Datum: 21.08.13 15:04
avatar

Tak snad například takhle:

Private Sub Worksheet_Change(ByVal Target As Range)
Call datum(Target)
End Sub
Private Sub datum(z)
If Intersect(Range("C:D"), z) Is Nothing Then Exit Sub
Set c = Range("B" & z.Row)
If Len(c.Value) = 0 Then c.Value = Date
End Sub
doplněno 21.08.13 15:05:

If Intersect(Range("C: D"), z) Is Nothing Then Exit Sub

Ohodnoceno: 0x
 
Od: ppcko*
Datum: 04.09.13 10:34

Omlouvám se, přehlédl jsem Vaši odpověď.

Když jsem se pokusil vložit Vaše makro, žádnou změnu jsem nezpozoroval :/ Možná to jen dělám špatně, nevím. Nějaká doplňující rada?

Děkuji.

Od: tecr®
Datum: 21.08.13 09:18

Odpověď na tuto otázku jsem také hledala a stejně jako vy - bez úspěchu. Poradili mi - Stiskněte a držte klávesu Ctrl a k tomu stiskněte i klávesu středník (klávesa pod Esc) = aktuální datum. Nevím, do jaké míry Vám toto řešení vyhovuje, ale pro mě to byla nejlepší varianta, kterou jsem dostala.

Ohodnoceno: 0x
 
Od: ppcko*
Datum: 21.08.13 12:04

Ano tohle je způsob, který je vhodný k rychlému vložení aktuálního statického data, viz: http://office.microsoft.com/c…-bunky-HP010342622.aspx?CTT=1
Nicméně, na mě je to až moc velký kompromis :)) Nějak to jít musí, byť přes ta makra...

Datum: 21.08.13 18:18
avatar

Datum je pouze a jedině číslo, které se automaticky aktualizuje po půlnoci mikrosofťáckého času.

Znáte funkci paste special - vložit jinak? Jestli ne, pak si ji nastudujte. Tuto funkci budete spouštět makrem, bez kterého se neobejdete.

Jestli chcete zabránit aktualizaci datumu, pak úlohu musíte rozdělit na dvě půlky. Jedna vám ve vaší buňce vytvoří aktuální datum (to umíte) a ve druhé půlce musíte použít funkci paste special - vložit jinak - a vybrat způsob uložení jako hodnota - value. Pak vám ve vaší buňce zůstane to skutečné prvotní datum, které se už nikdy nezmění.

Naučte se ručně vkládat aktuální datum a poté jej vložit jinak, jako hodnotu. Až vám to půjde, potom se ozvěte a já přidám.

Ohodnoceno: 2x
 
Od: ppcko*
Datum: 03.09.13 21:12

Zdravím figurek :)

Díky za reakci.

Postupu rozumím. Vložit datum ručně zvládám, pokud myslíte kombinaci kláves ctrl+|, ale pak nevím, jak vložit jako hodnotu. Pokud vložím aktuální datum např vzorcem =DNES(), buňku zkopíruju, tak vložit ji jako hodnotu dokážu. Princip tedy chápu, ale nevím jak to celé hodit do makra...

Umím tak akorát nahrát makro :)

Sub CopyPaste()
CopyPaste Makro
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub
A tohle mám na vložení datumu, když napíšu do tabulky hodnotu:
=KDYŽ(C13<>"";DNES();0)
Asi už budete vědět, co mi na to napsat :) Díky moc!
doplněno 03.09.13 22:08:

Trochu jsem hledal a zkoušel. Zatím zvládám spustit makro při změně buňky (jen mi to nefguje jen na tu konkrétní buňku, ale na jakoukoli):

Private Sub Worksheet_Calculate()
If Range("B14")> "1.1.2013" Then
Application.EnableEvents = False
Call CopyPaste
Application.EnableEvents = True
End If
End Sub
A tohle samozřejmě mění jen tu jednu buňku, nevím jak to udělat na větší rozsah:
Sub CopyPaste()
CopyPaste Makro
Range("B14").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
End Sub
Datum: 04.09.13 11:13
avatar

Vidím že se propracováváte mezi pokročilé uživatele. Gratuluji.

Tady máte dalších pár námětů pro experimentování.

*

První makro dělá přesně to, co byste dělal ručně.

Do buňky A1 vloží vzoreček, já jej mám ve tvaru =today(), protože mám americký excel. Tvar =DNES() mi nefunguje, vám možná fungovat bude.

Druhý řádek vezme obsah buňky do schránky a třetí jej vrátí zpátky, vložený jako hodnotu.

Mrkněte se na druhé makro. Je to obdoba prvního, s jedním rozdílem. Abyste adresu buňky nemusel psát třikrát, můžete použít strukturu With-End With. Uvnitř struktury popíšete všechno, co se má s buňkou udělat. Užitečná věc je tato struktura.

Třetí makro je obdoba druhého, ale pro buňky v rozsahu A1 až A10. Na obrázku vidíte, že v buňkách je skutečně vloženo datum a ne vzoreček. Také si zkuste, proč jsem do třetího makra přidal poslední řádek Range("A1").Select

Vyzkoušejte, zaexperimentujte a pak se zase ozvěte. Ukáži vám, jak se makra spouší změnou na listu.

Váš způsob Private Sub Worksheet_Calculate je takový nějaký divný.

*

Sub Macro1()

Range("A1").FormulaR1C1 = "=today()"

Range("A1").Copy

Range("A1").PasteSpecial Paste:=xlPasteValues

Application.CutCopyMode = False

End Sub

*

Sub Macro2()

With Range("A1")

.FormulaR1C1 = "=today()"

.Copy

.PasteSpecial Paste:=xlPasteValues

End With

Application.CutCopyMode = False

End Sub

*

Sub Macro3()

With Range("A1:A10")

.FormulaR1C1 = "=Today()"

.Copy

.PasteSpecial Paste:=xlPasteValues

End With

Application.CutCopyMode = False

Range("A1").Select

End Sub

Ohodnoceno: 2x
 
Od: ppcko*
Datum: 04.09.13 20:03

Zdravím figurek a děkuji za rychlou odpověď!

Píšete to tak hezky srozumitelně, že je mi to jasný :)

Co se týče vzorce =today() apod., tak je znám, dřív jsem používal taky anglický excel. Nicméně, ikdyž mám teď český, v makru to musím mít zadané anglicky (pokud přepíšu na .FormulaR1C1 = "=dnes()" , hodí chybu - to jen tak pro info...

Makro mi tedy funguje a docela ho i chápu. Funkce With a End With je opravdu šikovná (tady by to bylo skoro jedno, ale u složitějších věcí... ).

Ale jak udělat, aby se aktuální datum hodilo jen do vedlejší buňky od té, ve které proběhla změna?

Chtěl jsem něco zkoušet, ale např na tohle mi to háže chybu .FormulaR1C1 = "=if(C11<>"";today();0)" .

Díky za trpělivost!

Datum: 05.09.13 13:21
avatar

oukej. Mrknul jsem se na ten váš vzoreček

.FormulaR1C1 = "=if(C11<>"";today();0)"

který samozřejmě už od pohledu fungovat nemůže. Problém jsou uvozovky v uvozovkách. VBA vám takový výraz nevyluští. Kdybyste místo vnitřních uvozovek napsal jakékoliv číslo, pak jej vložíte bez problému, viz obrázek dole.

Ale jak jsem si všiml, vy chcete něco jiného, než jste poptával nahoře v dotaze. Tady máte další dvě makra, mrkněte se na ně, přeneste do svého sešitu a zkuste ručně spustit. Makro5 funguje kdekoliv, Makro6 zafunguje jen pro změny udělané ve druhém sloupci. To je ono konečné finální makro. Něco takového jste chtěl, ne?

On Error Resume Next znamená, že nikdy neuvidíte okno s chybovou hláškou.

If ActiveCell.Column = 2 Then je podmínka pro vložení data. Když aktivní buňka nebude ve druhém sloupci, pak se žádné datum nikdy nikam nevloží. Místo dvojky si můžete dosadit jakékoliv jiné číslo, 3, 4 ,10 atd.

ActiveCell.Offset(-1, 1) je trochu komplikovanější věc. Ve chvíli, kdy vložíte hodnotu a stisknete Enter, pak se aktivní buňka posune o řádek dolů. To znamená, že kdybyste použil Offset(0, 1) by se vám datum vloží o řádek níž. Jednička na pravé straně znamená, že se datum vloží o jeden sloupec napravo. Kdybyste napsal Offset(-1, 3), pak se vám datum vloží o tři sloupce napravo.

Tak, to je myslím jasné, zaexperimentujte a uvidíte.

Teď přijde hlavní věc, jak makra spustit automaticky. Musíte použít to, čemu se říká události listu. Změna buňky je událost, změna obsahu buňky je událost, výpočet na listu je událost a podobně. Událostí spustíte makro, chce to ale vybrat tu správnou událost. Asi ti bude událost change. Něco změníte, stisknete Enter a tím spustíte makro.

Dost těžko se popisuje co teď a jak pokračovat, proto jsem vám udělal obrázek. Poklepejte na jméno listu, tím se vám otevře okno pro události listu. V levém rozbalovacím seznamu vyberte Worksheet, v pravém událost change a do kódu této události vložte volání vašeho makra tak jak vidíte, Call Macro6. Tady už vám nepomůžu, přes tuto překážku se musíte prokousat sám.

Možná taky budete mít trochu problém s formátem data

.NumberFormat = "[$-409]d-mmm-yyyy;@"
Kdyby vám nefungoval tady tento formát, pak pusťte záznamník maker a zaznamenejte makro na formátování datumu nějaké buňky. Pak ten váš správný a fungující formát přeneste do kódu makra. Nic složitého.

Tak přeji mnoho zdaru.

*

Sub Macro5()
With ActiveCell.Offset(-1, 1)
.Value = Date
.NumberFormat = "[$-409]d-mmm-yyyy;@"
End With
End Sub

*

Sub Macro6()
On Error Resume Next
If ActiveCell.Column = 2 Then
With ActiveCell.Offset(-1, 1)
.Value = Date
.NumberFormat = "[$-409]d-mmm-yyyy;@"
End With
End If
End Sub

*

Ohodnoceno: 2x
 
Od: ppcko*
Datum: 05.09.13 15:28

Zdravím Vás...

Opět jasné a polopatické. Během chvilky jsem to zprovoznil!

Chtěl jsem přesně tohle i nahoře, ale je možné, že jsem se vyjádřil nepřesně.

Mám ještě jeden doplňující dotaz, ale ten je úplně jiný a tak asi kvůli přehlednosti/dohledatelnosti založím nové vlákno. Vložím sem záhy odkaz a budu rád, když se podíváte.

Opravdu Vám mockrát děkuju za pomoc, jste zlatej!

doplněno 05.09.13 15:35:

Odkaz na doplňující otázku: https://www.poradte.cz/pocita…l-makro-vs-zamcena-bunka.html

Rád bych zkrátka sešit zamknul, aby v něm nemohl nikdo nic poplést, ale jakmile zamknu sloupec s datumy, který makro upravuje, tak se makro neprojeví :/

 

 

 

 

Přihlásit se k odběru odpovědí z této otázky:

Neneseme odpovědnost za správnost informací a za škodu vzniklou jejich využitím. Jednotlivé odpovědi vyjadřují názory jejich autorů a nemusí se shodovat s názorem provozovatele poradny Poradte.cz

 
Copyright © 2004-2016 Poradna Poradte.cz. Všechna práva na poradně Poradte.cz vyhrazena.