Application.OnTime w Outlooku [VBA]

Pytania, problemy, uwagi związane ze starszymi wersjami Microsoft Outlook 2003, 2002 (XP), 2000, 98

Moderator: Moderatorzy

Application.OnTime w Outlooku [VBA]

Postprzez Shon Oskar » Wt 14.11.2006 11:30

Chciałbym wymusić pewną procedurę w określonym czasie lub ustawić interwał dla jej automatycznego wykonywania

niestety w Outlooku nie ma:
Kod: Zaznacz cały
Application.OnTime Now + TimeValue("00:00:05"), "RunForrest"


jak realizuje się podonbe instrukcje?
O'Shon
Shon Oskar
 
Posty: 182
Dołączył(a): Pn 16.10.2006 09:05
Lokalizacja: Veracomp S.A.

Postprzez michu » Śr 15.11.2006 08:36

W zdarzeniu Application_Startup musisz utworzyć pętlę i sprawdzać w niej czy juz nadszedł czas uruchomienia jakiegoś makra. W pętli tej musisz też za każdym razem wołać funkcję DoEvents(), żeby Outlook mógł normalnie pracować.

Przykład podobnej pętli znajdziesz tutaj:
http://www.outlook.pl/forum/viewtopic.php?p=1914

Osobiście nigdy tak nie robiłem i zastanawiam się, jak to wpłynie na pracę użytkownika z Outlook'iem, czy Outlook będzie działał wolniej.
Pozdrawiam
Michu
michu
 
Posty: 4190
Dołączył(a): N 05.02.2006 17:49
Lokalizacja: Jelenia Góra

Postprzez Shon Oskar » Śr 15.11.2006 13:13

Coś mi nie pracuje tamta procedurka
zrobiłem coś takiego:
Kod: Zaznacz cały
Sub aaaa()
    Dim PauseTime, start, finish, a
a = 1 'tymczasowo

'docelowo if userform1.checkbox = true then
If a = 1 Then
    PauseTime = 15
ponowienie:
    start = Timer
    finish = start + PauseTime
    While (start < finish)
        start = Timer
        DoEvents
    Wend
    MsgBox "bbb" 'tu bedzie podpieta procedura robienia czegoś tam
    a = 1 'sprawdzenie czy nie zmieniono zdania
    GoTo ponowienie
End If
End Sub

problem tylko w tym że strasznie obciaza proca ;(
może jakies rozwiązanie ?
O'Shon
Shon Oskar
 
Posty: 182
Dołączył(a): Pn 16.10.2006 09:05
Lokalizacja: Veracomp S.A.

Postprzez michu » Śr 15.11.2006 18:11

Tego się właśnie obawiałem... Niestety nie widzę innego rozwiązania. Wydaje mi się, że próbujesz użyć API Outlook'a do zbyt zaawansowanych rozwiązań, dla których należałoby stworzyć raczej add-in'a lub rozszerzenie Outlook'a.
Pozdrawiam
Michu
michu
 
Posty: 4190
Dołączył(a): N 05.02.2006 17:49
Lokalizacja: Jelenia Góra

Postprzez Shon Oskar » Cz 16.11.2006 09:35

Może mniejwiecej przybliżę założenie wymuszenia procedury o określonym czasie. może michu coś ci wpadnie do głowy.

Mój dodatek łączy się z portalem wew. korporacji i ściąga informacje o kontaktach i spotkaniach. Instaluje to do PSTka. Niestety aby sprawdzić ile jest nowych kontaktów lub spotkań należy uruchomić procedurę.
Wygodnym obejściem było by ustawienie automatycznego sprawdzenia np. co 30min. jeżeli wystąpiły różnice pomiędzy zaimportowanymi wcześniej danymi a istniejącym na portalu to uruchamia powiadomienie o ich ilości i proponuje import.
Bez wdrożenia takiego mechanizmu użytkownikowi może nie wiedząc "nie chcieć" uruchomić sprawdzenia ilości szt .... a nie chce do tego dopuścić aby np. zalegające spotkania dedykownane dla danej osoby nie były na bieżąco importowane do Outlooka.

Przyczyną przestoju pow. makra jest pętla Do która mierzy czas odliczając próbkę co sekundę.... i w tym sęk. Może by to taktowanie zwolnić.
Mam już VB6Enterprice gdzie mógłbym zrobić DLLa jednakże nie mam w tym doświadczenia.[/i]
O'Shon
Shon Oskar
 
Posty: 182
Dołączył(a): Pn 16.10.2006 09:05
Lokalizacja: Veracomp S.A.

Postprzez Shon Oskar » Cz 16.11.2006 10:48

Może podpiąć sie do przycisku odbierania poczty?
czyli nie operać sie na zegarze i odliczania czasu w petlach
ale do procesu odebrania poczty = czyli poczas odebrania lub po jej zakończeniu wykonać procedórkę ?

Michu co ty na to?
czy można podpiąć sie do tego procesu.
może jakieś if sendkeys ... then
O'Shon
Shon Oskar
 
Posty: 182
Dołączył(a): Pn 16.10.2006 09:05
Lokalizacja: Veracomp S.A.

Postprzez michu » Cz 16.11.2006 11:04

Do przycisku odbierania poczty się nie podepniesz, ale możesz skorzystać z takich zdarzeń, jak:
Application_SendMail - użytkownik wysyła wiadomość
Application_NewMail - przychodzi nowa wiadomość
Application_Reminder - wyświetlane jest przypomnienie dla jakiegoś elementu
Pozdrawiam
Michu
michu
 
Posty: 4190
Dołączył(a): N 05.02.2006 17:49
Lokalizacja: Jelenia Góra

Postprzez OShon » Cz 16.11.2006 19:50

Nigdzie nie mogę wyszukać żadnego artykułu na ten temat, może jakaś podpowiedz lub przykład....do Application_SendMail
Obrazek
Oskar Shon - MVP Office Dev. 11/21, 3x MCC, 4/9/22 TechNet
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Zobacz fajne dodatki: Outlooka, Excela, Worda lub PowerPointa
OShon
 
Posty: 10988
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Projekt autorski VBATools.pl

Postprzez michu » Cz 16.11.2006 22:10

Application_SendMail, Application_NewMail, Application_Reminder to zdarzenia, funkcje, które woła Outlook w określonych sytuacjach. Wystarczy, że w module ThisOutlookSession utworzysz funkcję:

Kod: Zaznacz cały
Private Sub Application_Startup()
    MsgBox "Outlook startup"
End Sub


a Outlook ją wywoła, w tym przypadku w momencie uruchamia Outlook'a.

Gdy otworzysz edytor VBA Outlook'a, przejdź do modułu ThisOutlookSession. W lewym combo box nad kodem wybierz "Application", a w prawym zobaczysz dostępne zdarzenia. Wybierz któreś, a do kodu dodana zostanie funkcja z obsługą zdarzenia.
Pozdrawiam
Michu
michu
 
Posty: 4190
Dołączył(a): N 05.02.2006 17:49
Lokalizacja: Jelenia Góra

Postprzez OShon » Pt 17.11.2006 00:09

no wszystko fajnie ale nie mam zdarzenia SendMail
a wpisanie na siłe procedury do ThisOutlookSession

Kod: Zaznacz cały
Private Sub Application_SendMail()
MsgBox "wysłano maila"
End Sub

nie wymusza pow komuniaktu.

ale znalazłem Application_ItemSend
chyba jest równoważne ... bede testował z rańca ;]
pozd.
Obrazek
Oskar Shon - MVP Office Dev. 11/21, 3x MCC, 4/9/22 TechNet
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Zobacz fajne dodatki: Outlooka, Excela, Worda lub PowerPointa
OShon
 
Posty: 10988
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Projekt autorski VBATools.pl

Postprzez michu » Pt 17.11.2006 07:56

Aaa, przepraszam, nie ma takiego zdarzenia jak SendMail. Dla przychodzących wiadomości są zdarzenia:
Application_NewMail
Application_NewMailEx

Application_NewMailEx dostępne jest tylko w Outlook 2003, w argumencie zawiera listę ID nowych wiadomości. Application_NewMail nie ma żadnego argumentu i nie niesie ze sobą żadnych informacji na temat tego jaka nowa wiadomość została dostarczona.
Pozdrawiam
Michu
michu
 
Posty: 4190
Dołączył(a): N 05.02.2006 17:49
Lokalizacja: Jelenia Góra


Powrót do Microsoft Outlook

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości

cron