< návrat zpět

MS Excel


Téma: Po splnění podmínky odeslat info email rss

Zaslal/a 14.11.2012 0:21

S VBA začínám, takže zatím jen vykrádám již hotové kódy od ostatních zde a z netu a upravuju (co zvládnu) pro vlastní potřebu :)

Reším nasledující:
na Listu1 mám seznam, kam zapisuju zakázky od kdy do kdy byla v opravě + její stáří (tabulku jsem zjednodušil pro vzor).

Sešit bych měl otevřen a denně bych z něj potřeboval odesílat, třeba v 8:00hod, informativní email, bez přílohy, pouze předmět a text v těle emailu (např. některá ze zakázek má stáří 25dnů nebo více, ukončit a odeslat).
- posílání emailu jsem tu na fóru našel - to funguje parádně (je v modulu2)
- povedlo se mi zmastit kód pro spuštění makra na odeslání emailu v konkrétní hodinu - to mi funguje taky parádně (modul1)

jsem ale v pastí s tím, aby se to odeslalo pouze pokud je splněna podmínka na Listu1, když hodnota v "D" je > 24
- zde jsem opět vykradl již hotový kód, poupravil jej, ale mám problém, že mi to nefunguje na sloupec "D" kde je výsledek vzorcem (na číslo do sloupce "E" mi to funguje) - kód je vložen do Listu1

1. Potřeboval bych doladit kód v Listu1, aby fungoval na výpočet vzorcem v "D"čku.
2. Sešit plánuji mít jako sdílený - bude tam v něčem problém??
3. Potřeboval bych to i nějak oblbuvzdornit. třeba pokud by někdo zapsal datum v "B" u několika řádků najednou atd.
4. Potřeboval bych aby se to i nějak pravidelně ukládalo

Pokud to lze nějak zjednodusšit nebo udělat jinak, sem s tím ;)

Za rady, tipy, triky předem moc díky.
Sabaot (Excel 2010)

Příloha: rar10307_vzor_pokus.rar (15kB, staženo 73x)
stop Uzamčeno - nelze přidávat nové příspěvky.

#010310
avatar
No asi se ti podarilo vylit s vanickou i dite, nebot ten zminovany kod casovace v modulu chybi.

Pokud by sis chtel ten sesit zalohovat, tak dej do ThisWorkbook nasledovny kod. Ten pri otevirani sesitu vytvori jeho zalohu na libovolnem miste, pricem na tomto miste bude 5 zaloh, ktere se budou postupne prepisovat, pokud od posledni zalohy uplynula urcita doba (zde jeden den). Je to pro stary excel, takze pokud budes ve formatu .xlsm, budes muset ten kod lehce upravit. Tech zaloh muzes mit kolik chces, ale musis je poprve na zalohovacim fleku vytvorit rucne, teprve pak se zacnou dokolecka prepisovat.

Private Sub Workbook_Open()

Dim Jmeno As String, Jmeno1 As String, Cesta As String
Dim Datum1 As Date, Max_Datum As Date, Min_Datum As Date
Dim Nejstarsi As Integer, Nejmladsi As Integer
Dim Cas, i%, Rozdil As Double

'kdyby ho mìl už nìkdo otevøený
If ActiveWorkbook.ReadOnly = True Then
MsgBox "Pozor, nìkdo už má tento soubor otevøený"
Exit Sub
End If

'když se to otevírá na PC doma, a se nic nedìje
If Application.UserName = "MD_doma" Then Exit Sub

'kdybychom otevírali záložný soubor, a se nic nedìje
If Left(Jmeno1, 4) = "Zal_" Then Exit Sub

Jmeno1 = ThisWorkbook.Name
Max_Datum = 100000
Min_Datum = 0

'musíme ze jména odstranit ".xls"
i = Len(Jmeno1)
Jmeno = Left(Jmeno1, i - 4)

'pøed to vložíme "Zal_" jako záloha
Jmeno = "Zal_" & Jmeno

'zadáme cestu, kam ukládáme zálohu
Cesta = "\\Server01\work_level\Zaloha\"

'tento cyklus projede všechny oèíslované záložné soubory a zjistí _
který je nejstarší a nejmladší
i = 1
Do
Jmeno1 = Cesta & Jmeno & i & ".xls"
'On Error Resume Next
If Dir(Jmeno1) = "" Then Exit Do
'On Error GoTo 0

Datum1 = FileDateTime(Jmeno1) * 1

If Datum1 < Max_Datum Then
If Datum1 > Min_Datum Then
Min_Datum = Datum1
Nejmladsi = i
End If
Max_Datum = Datum1
Nejstarsi = i
Else
If Min_Datum < Datum1 Then
Min_Datum = Datum1
Nejmladsi = i
End If
End If
i = i + 1
Loop

'kdyby nebyl nalezen žádný takový soubor, dej hlášku
If i = 1 Then
MsgBox "na místì " & Cesta & vbCr _
& " nebyly nalezeny záložné soubory" & vbCr & _
"Kontaktuj programátora"
Exit Sub
End If

'Nastavení minimálního intervalu zálohování 1 = 1 den
'porovnáme èas uložení nejmladšího a nynìjší èas

Cas = CDbl(FileDateTime(Cesta & Jmeno & Nejmladsi & ".xls"))
'zjisti rozdíl èasù
Rozdil = CDbl(Now) - Cas

'nápis ve stavovém øádku
Application.DisplayStatusBar = True
Application.StatusBar = "Poslední záloha byla uložena pøed " & Format(24 * Rozdil, "#0,0") & " hod"

If Rozdil > 1.5 Then
'pøepiš nejstarší zálohu
ActiveWorkbook.SaveCopyAs Cesta & Jmeno & Nejstarsi & ".xls"
End If

'vrátime excelu kontrolu nad stavovým rádkem
Application.StatusBar = False
Application.ScreenUpdating = True

End Sub
citovat
#010314
avatar
Ahoj Milane,
no zřejmě ano :) ale svedu to na tu pokročilou hodinu 5 přikládám správný file :) kde je i zbytek.

Zatím díky za kód na zálohování ;)
Příloha: rar10314_vzor_pokus2.rar (18kB, staženo 49x)
citovat
#010315
avatar
Myslim, ze pokud nahradis ten zbytecny udalostni kod na liste1 obycejnym podminenym formatovanim, tak to bude fachcit. Ale nepochopil jsem, jestli chces odeslat maily za kazdou zakazku >24 dnu (tedy zde bude muset byt kodova smyckla pres vsechny aktivni radky ve sloupci "D") anebo nerozumim cos myslel tim, ze ve sloupci E ti to funguje?citovat
#010316
avatar
za každou zakázku ne, to je asi zbytečně komplikované.
stačí jen jeden email denně, vždy pokud sloupec "D" bude kdekoliv mít hodnu > 24 ,pokud bude < 24 nebo "Hotovo" tak nic
(kterou zakázku a kolik jich je, to si už dohledají ;) )

ve sloupci "E" jsem si jen ověřoval, zda mi ten kód funguje. To tam nebude

Díky
S.citovat
#010318
avatar
Tak v tom pripade si dej jako prvni prikaz v Sub MailCDO(), hned pod deklaracemi:
If Application.Max(Worksheets("List1").Range("D:D")) < 24 Then Exit Subcitovat
#010320
avatar
nejsem si jist, zda jsem ten řádek doplnil správně 9

takže jestli jsem tě pochopil správně, tak mi stačí jen ty dva moduly?? zbytek co jsem tam měl je nepotřebný??

pro jistotu přikládám file.

poněvadž se mi zdá, že mi to takhle nefunguje 6
Příloha: rar10320_vzor_pokus3.rar (18kB, staženo 45x)
citovat
#010321
avatar
Hele rikals, ze ti to casovani funguje paradne. Nemam zadne velke zkusenosti s OnTime procedurama, ale rekl bych, ze se samy z modulu nespusti. Ja osobne pouzivam jednu, kterou mam v osobnim sesitu maker (PERSONAL), ta funguje. Treba se pletu, ale myslim si, ze "OnTime" proceduru musis narvat do ThisWorkbook jako udalostni proceduru, ktera se spusti s otevrenim sesitu a pak ceka na svuj cas:
Private Sub Workbook_Open()
Application.OnTime TimeValue("10:00:00"), "MailCDO"
End Sub

Pokud ten sesit otevres pred danou hodinou, tak uderem desate se zavola makro "MailCDO", ktere jako prvni vec udela to, ze si zjisti nejvetsi hodnotu ve sloupci D. Pokud ta nebude vetsi nez 24, tak se to ukonci, jinak vygeneruje e-mail.citovat
#010335
avatar
když tak nad tím přemýšlím, tak jsem asi ten OnTime pouštěl ručně 8 no ještě si s tím pohraju 10

ještě jednou děkuji za rady a vyčerpávající celodenní pomoc 1 časem se do toho snad dostanu 9

Díky
S.citovat

Uživatelské menu

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

Menu

Formulář Faktura

Formulář Faktura IV

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

Helios iNuvio

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.

On-line nástroje