Dodanie Menu do Poczta/Nowy [VBA]

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

Moderator: Moderatorzy

Postprzez bazylia » Śr 06.02.2008 19:18

Ale ja bym chciała, żeby makro modyfikowało tylko jednego maila, tego, dla którego został wciścięty przycisk. Załóżmy, że kod jest następujący (znacznie go uprościłam, żeby pokazać w czym problem ;)):
Kod: Zaznacz cały
Dim WithEvents oInspectors As Inspectors
Dim WithEvents oToolbarButton As CommandBarButton

Private Sub Application_Startup()
    Set oInspectors = Application.Inspectors
End Sub

Sub AddNewToolbarButton(oInspector As Inspector)
    Dim oMenuBar As CommandBar
    Set oMenuBar = oInspector.CommandBars.Item("Standard")
   
    Dim oControl As CommandBarControl
    For Each oControl In oMenuBar.Controls
        If "Subject Editor" = oControl.Caption Then Exit Sub
    Next
   
    If jest = False Then Set oToolbarButton = oMenuBar.Controls.Add(Type:=msoControlButton, Temporary:=True)
    With oToolbarButton
      .Style = msoButtonIconAndCaption
      .Caption = "Subject Editor"
      .Visible = True
      .BuiltInFace = True
      .FaceId = 320
      .Enabled = True
    End With
End Sub

Private Sub oInspectors_NewInspector(ByVal Inspector As Inspector)
    On Error GoTo ErrorLabel
    If Inspector.CurrentItem.MessageClass <> "IPM.Note" Then Exit Sub
    Call AddNewToolbarButton(Inspector)
    Exit Sub
ErrorLabel:
    Debug.Print Err.Description
End Sub

Private Sub oToolbarButton_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
    Call Project1.test
End Sub

Sub test()
    Dim mail As MailItem
    Set mail = Application.ActiveInspector.CurrentItem
    MsgBox mail.subject
End Sub

Otwieram maila, wciskam przycisk i pojawia się msgbox z jego tematem, po czym zamykam maila. I teraz jeżeli ten mail był jedynym otwartym, to wszystko jest ok, czyli mogę otworzyć kolejnego i wyświetlić jego temat. W przeciwnym przypadku przycisk się resetuje i nie działa już w żadnej wiadomości...
Ps. Jak w VBA zrobić niemodalne okno?
bazylia
 
Posty: 9
Dołączył(a): So 03.11.2007 21:49
Lokalizacja: Wrocław

Postprzez OShon » Śr 06.02.2008 20:33

Bazylio, czegoś tu nie rozumiem (na razie nie analizuje kodu, ale tak na pierwszy rzut oka)

1. Mówiliśmy o formie jaka zostaje uruchomiona
    forma.show (nie modalnie)
    forma.show 0 (modalnie)

a ty wyświetlasz komunikat w MSGBOX'ie .... gdzie nie można nic z tym zrobić, oprócz sprawdzenia czy właściwości procedury działają poprawnie.

2. do edycji tematu nic nie trzeba !
Otwierasz wiadomość i klikająć na temat dopisujesz co chcesz
zapisujesz lub zamykasz wiadomość z zapisem.
nowy temat zostaje.

3. jak chcesz zmienić temat bez otwierania wiadomości to stosuj lekko zmodyfikowany kod z mojego postu: http://www.outlook.pl/forum/viewtopic.php?t=2220
Obrazek
Oskar Shon - MVP Office Dev. 11/20, 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: 10448
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Projekt autorski VBATools.pl

Postprzez bazylia » Śr 06.02.2008 23:34

Ad 1. Uprościłam kod do minimum i zamiast właściwego makra umieściłam jedynie procedurę "test" z msgbox'em. Tu, po uruchomieniu, też widać w czym jest problem.
Ad 2. Do tematu są dopisywane pewne informacje, a ręczne ich wprowadzanie byłoby uciążliwe dla użytkownika i długotrwałe. Makro przyspiesza ten proces, wstawiając w odpowiednie miejsca domyślne wertości, które w razie potrzeby można w wyświetlanej formie zmienić.

Dziękuję za informacje o formie modalnej i niemodalnej.
bazylia
 
Posty: 9
Dołączył(a): So 03.11.2007 21:49
Lokalizacja: Wrocław

Postprzez OShon » Cz 07.02.2008 23:08

ok
polecam na początek w projektach wstawiać "Option Explicit"
Jest to instrukcja wymuszenia deklaracji zmiennych. Innymi słowy przed uruchomieniem instrukcji pozwala wykryć brak lub błąd.

Brak jest 1 deklaracji

Kod: Zaznacz cały
Dim jest As Boolean

Możesz ją umieścić w zmiennych globalnych (przed procedurami)
Zresztą na poziomie jaki jest przekazany na forum to jakikolwiek przełącznik tu jest nie potrzebny, wiec "jest" można wywalić..(o ile nie jest później wykorzystany)

zastosuj taki kod (zamiast "test")

Kod: Zaznacz cały
    Dim x As Integer
    Dim iCount As Integer
    Set oInspectors = Outlook.Inspectors
    iCount = Outlook.Inspectors.Count
    If iCount > 0 Then
        For x = 1 To iCount
            MsgBox oInspectors.item(x).Caption
        Next x
    Else
        MsgBox "Brak Inspektora."
    End If

Wyjaśni ci to działanie inspektora. Niestety nie wiem jak wzbudzić kilku inspektorów - niezależnych.... bo to działanie z wywołaniem nowej wiadomości ucina podtrzymanie inspektora w poprzedniej, a parametr przechodzi na następną. Może należało by wykonać jakąś deaktywacje lub przechować w tablicy wszystkie aktywne inspektory (tylko jak je wywołać z poziomu poprzednich wiadomości....) pytanie do Michu może będzie wiedział.

Sam jestem ciekaw odpowiedzi.
Obrazek
Oskar Shon - MVP Office Dev. 11/20, 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: 10448
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Projekt autorski VBATools.pl

Poprzednia strona

Powrót do Microsoft Outlook

Kto przegląda forum

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