VBA Outlook - odchycení události

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod notwist 23. 4. 2018 08:48

Dobrý den,
mám takovou představu, že bych odchytával události při příchodu nové zprávy a při odeslání zprávy v Outlooku. Při těchto akcích bych si zapisoval nějaké údaje jako odesílatel, čas přijetí / odeslání, předmět do nějakého souboru pro další zpracování.

Našel jsem postup, kdy se pomocí tohoto kódu odchytne událost při kliknutí na odeslání.

Kód: Vybrat vše
Public WithEvents myOlApp As Outlook.Application

Public Sub Initialize_handler()
Set myItem = Application.ActiveInspector.CurrentItem
End Sub

Private Sub myOlApp_ItemSend(Item As Object, Cancel As Boolean)
    Dim prompt As String
    prompt = "Are you sure you want to send " & Item.Subject & "?"
    If MsgBox(prompt, vbYesNo + vbQuestion, "Sample") = vbNo Then
        Cancel = True
    End If
End Sub



Když nyní kliknu na tlačítko odeslání, hodí mi to chybu:

Procedure declaration does not match description of event or procedure having same name


A pošta se naštěstí odešle. Ale samozřejmě se nic jiného nestane. Nevíte, co dělám špatně? Už nevím, co s tím. Díky za radu.
notwist
Kolemjdoucí

Odeslat příspěvekod JirkaVejrazka 23. 4. 2018 09:01

Tohle jsem delal pred davnymi lety, je to docela magie a uz si to moc nepamatuju (v podstate to stejne, co delas ty, jenom to nebylo ve VBA).

Nevypada to, ze by se signatura ItemSend handleru nejak zmenila (obcas se stava, ze v nove verzi pribude argument a pak to hazi tyhle chyby), tak bych si tipnul, ze mas zaregistrovanych nekoli verze sveho pokusneho kodu a Outlook nevi, kterou volat. Zkus prejmenovat "myOlApp_ItemSend" na neco jineho (samozrejme uz od toho "Public WithEvents...", nebo poradne odregistruj vsechny verze svych pokusu a zaregistruj znovu tu posledni.
JirkaVejrazka
Mírně pokročilý

Odeslat příspěvekod notwist 23. 4. 2018 09:15

Díky za komentář. Vypadá to, že jsem na to přišel :-). Je potřeba ti deklaraci udělat takto:

Private Sub myOlApp_ItemSend(ByVal Item As Object, Cancel As Boolean)

Zkusím se zeptat ještě zde, abych nepřidával další vlákno. Až odladím všechny funkce, co potřebuji, je nějaká možnost tyto funkce přenést i na jiný počítač? Myslím nějak něco někam nakopírovat, abych se nemusel znovu hrabat v editoru VBA na jiném PC? Díky :-).
notwist
Kolemjdoucí

Odeslat příspěvekod JirkaVejrazka 23. 4. 2018 09:37

VBA moc neznam a nepouzivam. Normalne se to dela tak, ze se vyrobi tzv. Outlook Addin (jak to udelat z VBA si musis najit sam) a pak se nainstaluje na dalsi PC. Driv jsem to delal pres regsvr32, ale uz je to tak davno, ze se radsi podivej, jak se to dela dnes na modernich Windows...
JirkaVejrazka
Mírně pokročilý


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků