Como eu faço automaticamente anexos de impressão do Outlook 2010?

2

Estou tentando fazer com que o Outlook 2010 imprima anexos automaticamente após a chegada.

Encontrei isso na internet. O código do VBA é

Sub LSPrint(Item As Outlook.MailItem)  
    On Error GoTo OError

    'detect Temp
    Dim oFS As FileSystemObject
    Dim sTempFolder As String
    Set oFS = New FileSystemObject
    'Temporary Folder Path
    sTempFolder = oFS.GetSpecialFolder(TemporaryFolder)

    'creates a special temp folder
    cTmpFld = sTempFolder & "\OETMP" & Format(Now, "yyyymmddhhmmss")
    MkDir (cTmpFld)

    'save & print
    Dim oAtt As Attachment
    For Each oAtt In Item.Attachments
      FileName = oAtt.FileName
      FullFile = cTmpFld & "\" & FileName

      'save attachment
      oAtt.SaveAsFile (FullFile)

      'prints attachment
      Set objShell = CreateObject("Shell.Application")
      Set objFolder = objShell.NameSpace(0)
      Set objFolderItem = objFolder.ParseName(FullFile)
      objFolderItem.InvokeVerbEx ("print")

    Next oAtt

    'Cleanup
    If Not oFS Is Nothing Then Set oFS = Nothing
    If Not objFolder Is Nothing Then Set objFolder = Nothing
    If Not objFolderItem Is Nothing Then Set objFolderItem = Nothing
    If Not objShell Is Nothing Then Set objShell = Nothing

  OError:
    If Err <> 0 Then
      MsgBox Err.Number & " - " & Err.Description
      Err.Clear
    End If
    Exit Sub

  End Sub

Eu permiti que macros fossem executadas. Eu colei o código no ThisOutlookSession no editor do VBA e adicionei uma referência ao Microsoft Scripting Runtime. Eu criei uma regra verificando se a nova mensagem é de mim e se assim for executar o script. Enviei uma mensagem com um anexo .doc para mim e recebi a mensagem de erro "424 - Objeto obrigatório" após o recebimento.

Eu não tenho uma impressora em casa (eu preciso do código para um lugar diferente), então eu configurei o Microsoft XPS Writer como minha impressora padrão apenas para ver se funciona. É este o motivo do erro? Se não, o que é e como conserto?

E, mais importante, como faço o trabalho? Eu preciso usar um script VBA (não um complemento) e sou novo no VBA.

Estou usando o Windows XP agora, mas preciso que o trabalho funcione no Windows 7.

    
por Michał Masny 02.07.2013 / 21:44

1 resposta

1

Cole o seguinte código em ThisOutlookSession .

Edite o código conforme necessário, depois clique na macro Application_Startup() e pressione o botão Executar (F8). Isso inicia a macro sem a necessidade de reiniciar o Outlook.

Private Declare Function ShellExecute Lib "shell32.dll" Alias _
    "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, _
    ByVal lpFile As String, ByVal lpParameters As String, _
    ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Private WithEvents Items As Outlook.Items

Private Sub Application_Startup()
    Dim olNameSpace As Outlook.NameSpace
    Dim Folder As Outlook.MAPIFolder

    Set olNameSpace = Application.GetNamespace("MAPI")
    Set Folder = olNameSpace.GetDefaultFolder(olFolderInbox)
    Set Items = Folder.Items
End Sub

Private Sub Items_ItemAdd(ByVal Item As Object)
    If TypeOf Item Is Outlook.MailItem Then
        PrintAttachments Item
    End If
End Sub

Private Sub PrintAttachments(olItem As Outlook.MailItem)
    On Error Resume Next
    Dim colAtts As Outlook.Attachments
    Dim olAtt As Outlook.Attachment
    Dim sFile As String
    Dim sDirectory As String
    Dim sFileType As String

    sDirectory = "C:\Attachments"

    Set colAtts = olItem.Attachments

    If colAtts.Count Then
        For Each olAtt In colAtts
        '// List file types -
        sFileType = LCase$(Right$(olAtt.FileName, 4))

        Select Case sFileType
            Case ".xls", ".doc"
            sFile = ATTACHMENT_DIRECTORY & olAtt.FileName
            olAtt.SaveAsFile sFile
            ShellExecute 0, "print", sFile, vbNullString, vbNullString, 0
            End Select
        Next
    End If
End Sub

Consulte Anexar anexos automaticamente

    
por 08.02.2016 / 01:19