Stránka 1 z 1

Automatické odesílání sešitu na email  Vyřešeno

Napsal: 11 říj 2012 13:41
od Jsimi
Ahoj,
Mám jeden sešit č.1, se kterým pracuji každý den. Chtěl bych do něj vložit makro, např. při každém spuštění sešitu č.1, které by hlídalo sešit č.2 a v případě jeho změny, by tento sešit odeslalo na předem určené emaily.
Možná to jde i jednodušeji, ale myslel jsem třeba na sešitu č.1 vytvořit skrytý list, do kterého by se ukládal datum a čas každého odeslání sešitu č.2 a podle data a času jeho změny by se vyhodnocovalo, zda je třeba ho odeslat nebo ne.
Díky za každý nápad.

Re: Automatické odesílání sešitu na email

Napsal: 11 říj 2012 15:35
od ITCrowd
Na to bych šel radši ve vbs. Klidně by pak mohl zapisovat či vytvářet xls soubor s daty a časy. Startoval by po spuštění PC (po přihlášení).

Re: Automatické odesílání sešitu na email

Napsal: 11 říj 2012 16:13
od Jsimi
Jsem trochu mimo, nevím co je to vbs.

Re: Automatické odesílání sešitu na email

Napsal: 11 říj 2012 16:40
od ITCrowd
visual basic script. Syntaxe je podobná jazyku VBA ve kterém se píší makra.

--- Doplnění předchozího příspěvku (11 Říj 2012 20:14) ---

Test xls souboru na změnu - nelze jednoduše použít metodu DateLast Modified protože excel změní datum a čas už při otevření souboru. Pokud se soubor nezmění, pak datum a čas vrátí zpět, jenže to už soubor může projít testem a být chybně vyhodnocen. Nicméně jsem toto obešel tak, že mažu atribut "A" testovaného souboru. Excel po uložení změn totiž tento atribut nastavuje. Kod vypadá asi takto:

Kód: Vybrat vše

Const file = "K:\Testovany.xls"  ' hlídaný soubor na změnu
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Set oFile = fso.GetFile(file)
Text = "Soubor " & oFile.Name & "  byl změněn"
  If oFile.Attributes AND 32 Then
   MsgBox Text, vbOKOnly + vbInformation, "Upozornění"
   oFile.Attributes = oFile.Attributes XOR 32
  End If

Odeslání souboru v e-mailu v případě zájmu natrénuju a dám vědět.

Re: Automatické odesílání sešitu na email

Napsal: 12 říj 2012 10:03
od cmuch
Odesílání emailu z excelu je popsáno zde http://excelplus.net/news.php?readmore=122

Re: Automatické odesílání sešitu na email

Napsal: 12 říj 2012 16:14
od Jsimi
Tak ten kod dělá to co jsem si představoval. Teď, jestli můžu poprosit, rozchodit to odeslání na emaily. Pokud se to povede, bylo by to super. Ale mám jednu poznámku. Např.ten skript by se měl spouštět automaticky po přihlášení do počítače a pokud by měl hned posílat email, tak nastává problém se spouštěním Outlooku, kde je potřeba se nejprve přihlásit k exchange serveru, takže by asi bylo potřeba to časově posunout třeba o 10 min. Možná je i jiná možnost, ale já tento skript vidím poprvé a v makrech jsem uplný začátečník, který dává makra dohromady z různých rešení, nebo za pomoci Vás všech tady na fóru.

Re: Automatické odesílání sešitu na email

Napsal: 12 říj 2012 16:48
od ITCrowd
Pokud si myslel můj kód: K odeslání e-mailu outlook netřeba. Stačí vědět smtp server - předpokládám. I když přes outlook to určitě půjde taky. Počáteční zpoždění taky není problém. A pokud to bude běžet automaticky, tak tam bude muset být nekonečná smyčka, předpokládám, že bude stačit test 1x za 10 minut.

Re: Automatické odesílání sešitu na email

Napsal: 12 říj 2012 17:20
od Jsimi
Nekonečná smyčka není ani žádaná, změnit daný soubor může oprávněná osoba v průběhu směny třeba 3x, takže následující kontrola je v hodná až na další směně, aby se neposílaly 2 emaily naprosto zbytečně, takže kontrola by právě byla spuštěna po přihlášení do PC další směnou. Přes ten SMTP server to bohužel nepůjde. Přístup k emailu je pouze přes exchange, nebo Outlook Web App.Takže si myslím že spoždění cca.10 min je ideální.

Re: Automatické odesílání sešitu na email

Napsal: 12 říj 2012 20:46
od ITCrowd
Takže tady je výsledek:

Kód: Vybrat vše

'**********************************************
'*   Script testuje soubor excelu na změnu    *
'* Pokud je soubor změněn odešle jej e-mailem *
'*       vytvořeno pro PC-Help                *
'*                                            *
'*        Etienna@Script v1.0                 *
'**********************************************

Option Explicit
Dim fso, oFile, Text, Pause
Dim objOutlk   'Outlook
Dim objMail   'Email item
Dim strMsg
Const olMailItem = 0
Const file = "C:\testovany.xlsm"  ' hlídaný soubor na změnu
Pause = 600000 'Počáteční zpoždění v ms
WScript.Sleep Pause
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Set oFile = fso.GetFile(file)
Text = "Soubor " & oFile.Name & "  byl změněn"
'test xls
  If oFile.Attributes AND 32 Then
   'MsgBox Text, vbOKOnly + vbInformation, "Upozornění"
   Odeslani
   oFile.Attributes = oFile.Attributes XOR 32
  End If

Sub Odeslani
'Nová zpráva
   Set objOutlk = createobject("Outlook.Application")
   Set objMail = objOutlk.createitem(olMailItem)
   objMail.To = "my.mail@blabla.cz"
   objMail.cc = "" 'Zde adresa pro kopii; objMail.bcc pro skrytou adresu
'Předmět
   objMail.subject = "Automatická zpráva " & cstr(day(now)) & ". " & cstr(month(now)) & ". " & cstr(year(now))
'Zpráva   
   strMsg = "První řádek zprávy" & vbcrlf
   strMsg = strMsg & "Druhý řádek zprávy"
'Příloha
   objMail.attachments.add(file)
   objMail.body = strMsg
   'objMail.display 'Zobraz před odesláním, jinak rovnou objMail.Send pro odeslání
   objMail.Send
End sub
'Clean up
Set objMail = Nothing
Set objOutlk = Nothing
Set fso = Nothing
Set oFile = Nothing

Pokud bys chtěl zobrazovat zprávu o změně, pak umaž apostrof (') před MsgBox.
Vzhledem k tomu, že nejde použít SMTP je tam malá komplikace. Mkrkvosoftí klasika :oops: .
Pokud se rozhodneš zobrazit zprávu před odesláním, je to ok, jen odeslání musí schválit obsluha.
Pokud použiješ metodu obj.Mail.Send (tak jak je to napsáno) zobrazí outlook varování (viz. obrázek). Ale třeba jde outlook nastavit tak, aby to nezobrazoval - to nevím, mám ho jen v práci, jinak se mu vyhýbám jak to jen jde.

--- Doplnění předchozího příspěvku (12 Říj 2012 21:19) ---

Ještě doplnění - outlook nemusí být spuštěný. varování se ale zobrazí i tak.

Re: Automatické odesílání sešitu na email

Napsal: 13 říj 2012 18:55
od Jsimi
Děkuji za pomoc, funguje to perfektně. Dokonce jse mi povedlo, že není potřeba žádný zásah obsluhy, kromě toho že ten outlook, pokud není spuštěný, se spustí, požaduje přihlášení a pak se zase ukončí. Ale to není na závadu, protože první věcí kterou obsluha dělá je, že se přihlásí do Outlooku, proto to spoždění.
Ještě jednou dík.

Re: Automatické odesílání sešitu na email

Napsal: 13 říj 2012 21:04
od ITCrowd
Přihlášení požaduje zřejmě proto, že jednotliví členové obsluhy mají každý jiný účet. Outlook na kterém jsem to zkoušel má jen jediný účet a automaticky se na něj přihlašuje, protona přihlášení netrval.
Uvedený příklad sloužím mj. k tomu, že ve vbs lze skoro všechno. Doufám, že příznivců vbs po tomto přibude. Téma můžeš zamknout.