Okno drukowania

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

Moderator: Moderatorzy

Okno drukowania

Postprzez galble » Pn 10.12.2007 10:45

Jak poprzez makro otworzyć okno drukowania (odpowiednik Plik\Drukuj..)? Uzywam makra dodajacego załączniki do wiadomości HTML (OL 2000) i automatycznie drukujacego do domyslnej drukarki poprzez "Printout". Chciałbym aby makro nie drukowało, lecz otwierało tylko okienko drukowania. Jest taka możlwość? Do edycji e-mail nie używam edytora Worda. Prosze o pomoc.
galble
 
Posty: 38
Dołączył(a): Śr 06.09.2006 07:35

Postprzez michu » Pn 10.12.2007 12:14

Na przykład poprzez zasymulowanie kliknięcia klawiszy Ctrl+P:
Kod: Zaznacz cały
Set WshShell = CreateObject("WScript.Shell")
WshShell.SendKeys ("^p")
Pozdrawiam
Michu
michu
 
Posty: 4190
Dołączył(a): N 05.02.2006 17:49
Lokalizacja: Jelenia Góra

Postprzez galble » Pn 10.12.2007 12:56

Czy istnieje jakiś inny sposób poza SendKeys?Stosowanie SendKeys nie jest zalecanym rozwiazaniem ze względu na nieprzewidywalność tych działań (raz zadziała a raz z jakiegoś powodu nie).
galble
 
Posty: 38
Dołączył(a): Śr 06.09.2006 07:35

Postprzez OShon » Pn 10.12.2007 16:27

galble napisał(a):Stosowanie SendKeys nie jest zalecanym rozwiazaniem ze względu na nieprzewidywalność

Bzdury ;]
Nie jest przewidywalne, ale w przypadku kiedy mamy do czynienia z różnymi wersjami aplikacji (np 2000 a 2003 lub wer ENG i PL). Tam po prostu są inne klawisze skrótowe i należy tak napisać kod aby wpierw rozpoznał wersje i do tego dopasował klawisz skrótu.

Użyj Val(Application.Version) aby rozpoznać przypadek.

..jednakże w przypadku Ctrl+P nie ma takiej potrzeby ;]
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 michu » Pn 10.12.2007 17:30

@galble
Tak, jak pisze OShon, w tym wypadku SendKeys akurat nie powinno stwarzać problemów - chociaż ja też zazwyczaj bardzo ostrożnie podchodzę do tej funkcji.

Inny sposób, to odszukanie komendy Plik | Drukuj w menu poprzez API Outlook'a i jej uruchomienie. Można to zrobić podobnie jak w przykładzie z artykułu Ustawianie pola "Od" w nowych wiadomościach wyświetlane jest pole OD w wysyłanych wiadomościach:

Kod: Zaznacz cały
    Dim cmdBars As CommandBars
    Dim cmdBar As CommandBar
    Dim oMenuItem As CommandBarControl
   
    Set cmdBars = oNewInspector.CommandBars
    Set cmdBar = cmdBars.Item("Menu Bar")
    Set oMenuItem = cmdBar.FindControl(, 1867, , , True)
    oMenuItem.Execute
Pozdrawiam
Michu
michu
 
Posty: 4190
Dołączył(a): N 05.02.2006 17:49
Lokalizacja: Jelenia Góra

Postprzez galble » Pt 14.12.2007 09:52

Zastosowałem się do podpowiedzi dotyczacych zastosowania FindControl i udało mi się odwołać do kontrolki Plik\Drukuj...!Makro to połączyłem z makrem dodającym załączniki do wiadomości HTML. Wszystko działa OK. Mam jeszcze pytanie odnosnie zastosowanego przez mnie makra Delay(). Czy jest możliwość nie stosowania tego makra, tylko np. aby makro okno_druk() było wykonywane po ukończeniu poprzedzajacego go zadania (oMail.Display). Ustawienie odpowiedniego czasu opóźnienia na jednym komputerze wystarczy 2 sek. na innym trzeba 4 sek., jeszcze uzaleznione to jest od obciążenia systemu. Chciałbym, jeśli jest taka możliwość znaleźć jakieś inne rozwiązanie tego problemu. Proszę o pomoc.
Kod: Zaznacz cały
Sub PrintWithAttachList()
On Error GoTo ErrorWindow
    Dim oMail As Object
    Set Wshshell = CreateObject("WScript.Shell")
    'Folder dla kopi e-mail HTML
    Set deletefolder = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderDeletedItems)
    For Each oMail In Application.ActiveExplorer.Selection
   
         Dim strList As String
         If oMail.Attachments.Count > 0 And oMail.GetInspector.EditorType = olEditorHTML Then
            oMail.Copy
            strList = "<b>Attachments:</b><br>"
            For nIndex = 1 To oMail.Attachments.Count
                strList = strList & oMail.Attachments.Item(nIndex).DisplayName & "; "
            Next
            strList = strList & "<br><br>"
            oMail.HTMLBody = strList & oMail.HTMLBody
            oMail.Save
            oMail.Close 1
            oMail.Move (deletefolder)
            oMail.Display
            Delay (2)
            Call okno_druk
            'Wshshell.SendKeys ("^p")
           
         Else
           
            Call okno_druk
            'Wshshell.SendKeys ("^p")
           
          End If
          Set deletefolder = Nothing
    Next
       
    Exit Sub
ErrorWindow:
  MsgBox "Błąd drukowania. Spróbuj wydrukować poprzez Plik/Drukuj..!", vbCritical
  End Sub

Private Sub okno_druk()
On Error Resume Next
   
    Dim oMail As Object
    Set oMail = Application.ActiveInspector.CurrentItem
    If oMail Is Nothing Then Exit Sub

    Dim cmdBars As CommandBars
    Dim cmdBar As CommandBar
    Dim oMenuItem As CommandBarControl
   
   
    Set cmdBars = oMail.GetInspector.CommandBars
    Set cmdBar = cmdBars.Item("Menu Bar")
    Set oMenuItem = cmdBar.FindControl(, 4, , , True)
    oMenuItem.Execute
End Sub

Public Sub Delay(ByVal Seconds As Long)
    'Opóźnienie zmiany drukarki na pierwotną
    Dim Start As Long
    Dim Finish As Long

    On Error Resume Next

    Start = Timer
    Finish = Start + Seconds
    While (Start < Finish)
        Start = Timer
        DoEvents
    Wend
End Sub
galble
 
Posty: 38
Dołączył(a): Śr 06.09.2006 07:35

Postprzez michu » Pt 14.12.2007 10:06

Czy jest możliwość nie stosowania tego makra, tylko np. aby makro okno_druk() było wykonywane po ukończeniu poprzedzajacego go zadania (oMail.Display). Ustawienie odpowiedniego czasu opóźnienia na jednym komputerze wystarczy 2 sek. na innym trzeba 4 sek., jeszcze uzaleznione to jest od obciążenia systemu.

Według mnie nie ma takiej możliwości.
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ł: Google [Bot] i 7 gości