
Moderator: Moderatorzy
Skoro są problemy z tym makrem to może jest możliwość zmiany edytora HTML w Outlook? Z tego co zauwayżłem podczas edytowania źródła wiadomości używany jest zwykły notatnik, który raczej nie jest polecany jako edytor HTML.
Jeżeli nie ma takiej możlwiości to prosiłbym o jakiś pomysł na code który wykluczy do konwertowania e-mail zakodowane w iso-8859-2 (inne kodowania może konwertować).
Sub html()
On Error GoTo ErrorWindow
Dim Wshshell
Dim oMail As Object
For Each oMail In Application.ActiveExplorer.Selection
If oMail.GetInspector.EditorType <> olEditorHTML Then
Set Wshshell = CreateObject("WScript.Shell")
Wshshell.SendKeys ("%ee")
Wshshell.SendKeys ("%fh")
Else
MsgBox "Wiadomość jest już w formacie HTML", vbInformation
End If
Next
Exit Sub
ErrorWindow:
MsgBox "Błąd! Proszę o kontakt z informatykiem!", vbCritical
End Sub
Witam (pierwszy raz na forum),
mam taki problem, użytkownik ma Outlooka XP i gdy drukuje mail to nie drukuje listy załączników do niego załączonych (chodzi mi tylko o nazwy, a nie treść załącznika), powinien drukować tak e-mail jak wygląda po otworzeniu, a tymczasem wycina te nazwy załączników, w przydaku Outlooka 2003 wszystko jest dobrze, oczywiście mam na myśli pełnego outlooka pracującego z serwerem exchange. Nie mam pomysłu co zmienić, żeby działało, dzięki za pomoc
Wshshell.SendKeys ("%ee")galble napisał(a):Czy jest możliwość zastąpienia innym rozwiązaniem następującej lini kodu(nadającej e-mail właściwość "write"):
- Kod: Zaznacz cały
Wshshell.SendKeys ("%ee")
Chciałbym pozbyć się jednego sendkeys. Z góry dziękuję za pomoc.
SendKeys "%e"
SendKeys "e"Sub HTMLMail()
On Error GoTo ErrorWindow
Dim Wshshell As Object
Dim oMail As MailItem
Dim id_commanbars(1) As Integer ' tablica 2-wu elementowa
Dim oMenuItem As CommandBarControl
id_commanbars(0) = 5604 ' edycja wiadomości
id_commanbars(1) = 5564 ' zmiana na HTML
Set oMail = Application.ActiveWindow.CurrentItem
If oMail.GetInspector.EditorType <> olEditorHTML Then
For i = 0 To 1 Step 1
Set oMenuItem = Application.ActiveWindow.CommandBars.FindControl(, id_commanbars(i))
oMenuItem.Execute
Next i
Else
MsgBox "Wiadomość jest już w formacie HTML!!", vbInformation
End If
Exit Sub
ErrorWindow:
MsgBox "Błąd! Proszę o kontakt z informatykiem!", vbCritical
End Sub
Set kopiuj = Application.ActiveWindow.CommandBars.FindControl(, 19)
kopiuj.Execute
Wshshell.SendKeys ("^v")Private Sub Application_Startup()
End Sub
Sub PrintWithAttachList()
On Error GoTo ErrorWindow
Dim oMail As Outlook.MailItem
Dim drukuj, kopiuj, wklej, edytuj As CommandBarButton
Dim MyData As New msforms.DataObject
Set oMail = Application.ActiveWindow.CurrentItem
Set drukuj = Application.ActiveWindow.CommandBars.FindControl(, 4)
Set kopiuj = Application.ActiveWindow.CommandBars.FindControl(, 19)
Set wklej = Application.ActiveWindow.CommandBars.FindControl(, 22)
Set edytuj = Application.ActiveWindow.CommandBars.FindControl(, 5604)
'Folder dla kopi e-mail
Set deletefolder = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderTasks).Folders("kopie_wydruku")
Dim strList As String
'##################### HTML ###################################
If oMail.Attachments.Count > 0 And oMail.GetInspector.EditorType = olEditorHTML Then ' gdy są załączniki
If kopiuj.Enabled = False Then ' brak zaznaczenia tekstu,obiektu
oMail.Copy ' kopia e-mail
strList = "<b>Attachments:</b><br>"
For nIndex = 1 To oMail.Attachments.Count
strList = strList & oMail.Attachments.Item(nIndex).DisplayName & "; " ' lista załączników
Next
strList = strList & "<br><br>"
oMail.HTMLBody = strList & oMail.HTMLBody ' treść wiadomości HTML
oMail.Close olSave ' zamknięcie e-mail z zapisem
oMail.Move (deletefolder) ' przeniesienie do folderu
oMail.Display ' wyświetlenie e-mail
Delay (1) ' opóźnienie
drukuj.Execute ' drukowanie
Else ' gdy zaznaczony jest obszar wiadomości
kopiuj.Execute ' wykonanie opcji kopiuj - do schowka
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 = " " ' wyczyszczenie HTMLBody
edytuj.Execute ' właczenie opcji edytowania wiadomości
Delay (2)
wklej.Execute ' wklejenie zawartości schowka
oMail.HTMLBody = strList & oMail.HTMLBody ' dodanie listy załączników
oMail.Close olSave
oMail.Move (deletefolder)
oMail.Display
Delay (1)
drukuj.Execute ' drukowanie
End If
'gdy nie ma załączników
ElseIf oMail.Attachments.Count = 0 And oMail.GetInspector.EditorType = olEditorHTML Then
If kopiuj.Enabled = False Then ' gdy nie jest zaznaczony tekst
drukuj.Execute
Else ' gdy jest zaznaczony tekst
kopiuj.Execute
oMail.Copy
oMail.HTMLBody = " " ' wyczyszczenie HTMLBody
edytuj.Execute
Delay (2)
wklej.Execute
oMail.Close olSave
oMail.Move (deletefolder)
oMail.Display
Delay (1)
drukuj.Execute
End If
End If
' ####################### KONIEC HTML #######################################
' ####################### TEXT ##############################################
If oMail.GetInspector.EditorType <> olEditorHTML Then
If kopiuj.Enabled = False Then ' gdy nie jest zaznaczony tekst (niektywna opcja kopiowania)
drukuj.Execute
Else ' gdy jest zaznaczony tekst
kopiuj.Execute
oMail.Copy
For nIndex = 1 To oMail.Attachments.Count ' usuwanie załączników
strList = strList & oMail.Attachments.Item(nIndex).DisplayName & "; " ' lista załączników
oMail.Attachments.Remove 1
Next
MyData.GetFromClipboard ' odwołanie do schowka
If strList = Empty Then ' sprawdzenie czy w e-mail są załączniki
oMail.Body = MyData.GetText ' przypisanie obiektowi Body tekstu ze schowka
Else ' gdy są załączniki
oMail.Body = "Attachments: " & strList & Chr(10) & Chr(10) & MyData.GetText
End If
drukuj.Execute
oMail.Close olSave ' zamknięcie z zapisem
oMail.Move (deletefolder)
oMail.Display
End If
End If
' ################## KONIEC TEXT #############################################
Set deletefolder = Nothing
Set kopiuj = Nothing
Set edytuk = Nothing
Set wklej = Nothing
Set drukuj = Nothing
Exit Sub
ErrorWindow:
MsgBox "Błąd drukowania. Spróbuj wydrukować poprzez Plik/Drukuj..!", vbCritical
End Sub
'Opóźnienie
Private Sub Delay(ByVal Seconds As Long)
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
oMail.HTMLBody = " " ' wyczyszczenie HTMLBody oMail.HTMLBody = "<br><br>" ' wyczyszczenie HTMLBodyUżytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości