2

Я пытаюсь заставить Outlook 2010 печатать вложения автоматически при получении.

Я нашел это в интернете. Код 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

Я позволил макросам работать. Я вставил код в ThisOutlookSession в редакторе VBA и добавил ссылку на Microsoft Scripting Runtime. Я создал правило, проверяющее, получено ли новое сообщение от меня, и, если да, запускаю скрипт. Я отправил себе сообщение с вложением .doc и получил сообщение об ошибке «424 - Требуется объект» при получении.

У меня нет принтера дома (мне нужен код для другого места), поэтому я установил Microsoft XPS Writer в качестве принтера по умолчанию, просто чтобы посмотреть, работает ли он. Это причина ошибки? Если нет, что и как я могу это исправить?

И самое главное, как мне выполнить работу? Мне нужно использовать сценарий VBA (не дополнение), и я новичок в VBA.

Я использую Windows XP сейчас, но мне нужно, чтобы эта штука работала на Windows 7.

1 ответ1

1

Вставьте следующий код в ThisOutlookSession .

При необходимости измените код, затем щелкните макрос Application_Startup() и нажмите кнопку «Выполнить» (F8). Это запускает макрос без необходимости перезапуска 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

См. Распечатать вложения автоматически

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .