Tím, že existuje VBA je možné téměř cokoliv. Já osobně to nezapisuji do dalšího listu, ale do textového souboru. Vaše zadání ovšem trochu nechápu - chcete zaznamenat změnu a tu změnu potom vrátit? A ono se s tím bude nějak pracovat? Asi by to chtělo rozvést...
Tipl bych to na ověření dat.
Karta Data - Ověření dat a tam vymazat zprávu v záložce Zpráva při zadávání
Mno jo, ale teď mi došlo, že asi neuvažujete stejně jako já a máte sešit uložený v klasickém formátu (xls resp xlsm) a jen mu říkáte šablona ;)))
Pak má cmuch pravdu ;) a já jsem si aspoň pokecal (sám se sebou ;) )
Alespoň Vám odstraním zbytečnosti (goto, select)Sub test()
If ThisWorkbook.Name = "VZOR_NEUPRAVOVAT_ Evidence kontroly.xlsm" Then
MsgBox " Tento sešit je určen pouze jako šablona"
Else
If Sheets("Hárok1").Cells(3, 7).Value = "" Then
Sheets("Hárok1").Cells(3, 7).Value = Date
End If
End If
End Suba poradím, abyste si jej uložil jako šablonu.
To co napsal cmuch je sice pravda, ale mně napadá jiná věc.
Toto mi přijde podivné If ThisWorkbook.Name = "VZOR_NEUPRAVOVAT_ Evidence kontroly" ThenProtože předpokládám, že událost Open je spuštěná sešitem VZOR_NEUPRAVOVAT_ Evidence kontroly a tím pádem je ThisWorkbook.Name zbytečná.
Jedině bych pochopil, že nechcete, aby sešit někdo přejmenoval, ale o to dle následujícího kódu nejde. Takže ta podmínka je tam dle mého zbytečná.
Edit:
Pokud používáte šablonu, tak by to možná smysl dávalo, pak zkuste použítIf ThisWorkbook.FileFormat = xlTemplate Then
Palooo napsal/a:
eLCHa: povodne som chcel ale ja to skusam povacinou len v robote a tu sa hrat s kontaktami by bolo dost hard.
Mno, komentář Vám klidně dáme, ale musí být k čemu.
Takže - vytvořte nějaký nástřel, mrskněte ho sem a uvidí se. Takhle se tomu ale nikdo věnovat nebude. Kdysi jsem vypotil několik řádků k něčemu podobnému a už se mi to podruhé potit nechce, takže dávám odkaz ;)
http://wall.cz/index.php?m=topic&id=17370&page=1#post-17375
Na ten odkaz jsem nekoukal, ale mazání (přepisování) kontaktů je zvláštní. Nicméně může být.
Jestli to jde jedním krokem, nevím. Nepřišel jsem na to a nemyslím si to. Takže je třeba cyklus - se divím, že to Palooo ještě nevytvořil, cykly jsou jeho parketa ;))
Zkoušel jsem for each, ale nebylo to spolehlivé, takže klasicky for.
Sub subDeleteContacts()
Const olFolderContacts As Byte = 10
Dim olApp As Object
On Error Resume Next
Set olApp = GetObject(, "Outlook.Application")
If olApp Is Nothing Then
Set olApp = CreateObject("Outlook.Application")
End If
On Error GoTo 0
Dim olFolder As Object
Set olFolder = olApp.GetNamespace("MAPI").GetDefaultFolder(olFolderContacts)
Dim I As Integer
For I = olFolder.Items.Count To 1 Step -1
olFolder.Items(I).Delete
Next I
Set olFolder = Nothing
Set olApp = Nothing
End Sub
V kontaktech nemám podsložky a vytvářet si je se mi nechce - pokud je tam máte, možná to bude potřeba trochu upravit.
Nikdy jsem nic takového nevymýšlel, počítám, že bych to řešil úplně jinak než spouštět to v noci, ale...
Podle mně by mu mělo být jedno, jestli soubor spouštíte ručně nebo přes plánovač...
Když spouštíte soubor manuálně, odklikáváte volbu aktualizovat data nebo se aktualizuje automaticky?
Zkusil jste naplánovat úlohu např. na 10:00, abyste viděl co se děje na vlastní oči?
Nemá na to vliv, že win jsou v noci např. v režimu spánku nebo zamknuté (třeba si jen myslíte, že se v noci něco děje, ale ono ne ;) )?
Pokud máte v souboru událost Open-zkuste tam přidat
ThisWorkbook.RefreshAll
@lubo
Dobrá tedy, tak jsem si tu nápovědu otevřel. Může to být ztraceno v překladu (rozumějte rozdíl ve verzích = česká lokalizace) já to zkouším v E2007 a upřesním své předchozí tvrzení:
=NEPŘÍMÝ.ODKAZ(POLÍČKO("obsah"))nefunguje, protože NEPŘÍMÝ.ODKAZ očekává adresu buňky. Navíc u mne excel nezná pro argument "informace" hodnotu "odkaz". Musí se použít=NEPŘÍMÝ.ODKAZ(POLÍČKO("adresa"))nebo=NEPŘÍMÝ.ODKAZ(POLÍČKO("address"))
Druhá možnost je to, co použil marjankaj:=POLÍČKO("obsah")nebo=POLÍČKO("contents")
@marjankaj
nepochybuji, že má pravdu ;)
Zkoušel jsem co tu dal a=NEPŘÍMÝ.ODKAZ(POLÍČKO("odkaz"))vrací hodnotu #HODNOTA, proto jsem se ptal. Co píšete samozřejmě vím, nicméně protože to psal lubo, tak jsem nekontroloval argument "informace" ("info_type") - kde má být místo "odkaz" - "obsah"
=NEPŘÍMÝ.ODKAZ(POLÍČKO("obsah"))funguje a samozřejmě to funguje i bez nepřímého odkazu.
@lubo
=NEPŘÍMÝ.ODKAZ(POLÍČKO("odkaz"))
jako dostanu bez VBA do parametru odkaz adresu Selection?
Ale protože se stejně musí přepočítávat a stejně je tam událostní procedura, tak už mi přijde jednodušší komárovo řešení.
@roscher
tak se na mě vykašli! Psal jsem, že jsem laik a začátečník, umíš čítať??
ano - nic jiného byste stejně nezasloužil.
Vzhledem k tomu, že AL četl Vaše příspěvky, pak nad nimi přemýšlel, jak by to šlo a co by k tomu potřeboval, následně napsal několik ne krátkých příspěvků a ty po sobě četl, aby dávaly smysl (kéž by to tak dělali všichni) tak počítám, že Vám věnoval v sumě minimálně hodinu svého života, na což Vy zareagujete tímhle. Hmmm - co dodat.
Mno a protože mám trochu času, tak v cyklu by to vypadalo takto - UserForm2Dim txtS() As Class1
Private Sub UserForm_Initialize()
ReDim txtS(1 To 4)
Dim I As Byte
For I = 1 To 4
Set txtS(I) = New Class1
Set txtS(I).txtUni = Me.Controls("TextBox" & I)
Next I
End Sub
Private Sub CommandButton1_Click()
ReDim txtS(0)
Unload Me
End SubS tímto kódem už je Vám skoro jedno, kolik těch textboxů tam máte ;)
UserForm2:Dim txt1 As New Class1, txt2 As New Class1, txt3 As New Class1, txt4 As New Class1
Private Sub UserForm_Initialize()
Set txt1.txtUni = TextBox1
Set txt2.txtUni = TextBox2
Set txt3.txtUni = TextBox3
Set txt4.txtUni = TextBox4
End Sub
Private Sub CommandButton1_Click()
Set txt1 = Nothing
Set txt2 = Nothing
Set txt3 = Nothing
Set txt4 = Nothing
Unload UserForm2
End Sub
Class1:Public WithEvents txtUni As msforms.TextBox
Private Sub txtUni_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
UserForm2.Label1.Caption = txtUni.Name
End Sub
Další události pro jednotlivé textboxy už definujete přímo v modulu třídy a nemusíte to dělat x-krát v mudulu formuláře
edit:
pokud je těch textboxů více - 10, 20 atd - je už v podstatě nereálné dělat to bez modulu třídy
v tom případě ani nedefinujeme 10, 20 atd proměnných, ale samozřejmě pole o 10, 20 atd prvcích typu Class1
;)))
nemáme - nebo jsem nikde nenašel - přiřazené místo, kde můžeme uložit obrázky, takže nikam - prostě to chápu tak, že když je uložen na wall.cz, možná v nějaké konkrétní složce (upload?), taxe to tam přidá ;)
ale možná můžete vložit přílohu, pak zjistit url, editovat příspěvek a vložit url - vyzkouším
edit1 - test:
edit2 - funguje, ale vodotiskk tam nevidím, takže to bude nějak jinak ;))
btw:
proč Vás to tak zajímá ;)
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.