2016-02-26 6 views
2

Я использую код для вставки в электронную почту последнего экрана печати буфера обмена, но есть ли способ выбрать последние 3 экрана для печати? Или выбрать несколько экранов печати для вставки в электронную почту? Спасибо.Вставка буфера обмена по электронной почте

Sub clipboardcopy() 
    Dim OutApp As Object 
    Dim OutMail As Object 
    Dim olInsp As Object 
    Dim oRng As Object 


    On Error Resume Next 
    Set OutApp = GetObject(, "Outlook.Application") 
    If Err <> 0 Then Set OutApp = CreateObject("Outlook.Application") 

    On Error GoTo 0 
    Set OutMail = OutApp.CreateItem(0) 
    With OutMail 
     .To = "" 
     .CC = "" 
     .BCC = "" 
     .Subject = "PRINT SCREEN" 

     Set olInsp = .GetInspector 
     Set wdDoc = olInsp.WordEditor 
     Set oRng = wdDoc.Range 
     oRng.collapse 1 
     oRng.Paste 
     .Display 
    End With 

    Set OutMail = Nothing 
    Set OutApp = Nothing 
    Set olInsp = Nothing 
    Set wdDoc = Nothing 
    Set oRng = Nothing 
End Sub 

ответ

1

Извините, но я не думаю, что это возможно.

Стандартный буфер обмена Windows содержит только 1 элемент за раз.

Office clipboard содержит несколько элементов, но не доступен через VBA.

+0

Тогда есть ли способ вставить, когда я нажимаю экран печати? – wittman

+0

VBA не может слушать буфер обмена для событий. Это ограничивает ваши варианты. Вы можете написать код, который периодически проверяет буфер обмена на изменения. Но поскольку VBA работает на одном потоке, вы можете обнаружить, что это замедляет все остальное. Также было бы трудно избежать блокировки любого другого кода, который вы хотите запустить. –

0

Если вы хотите более одного экрана печати, добавьте его в текущую почту, а не создайте новую почту.

Идея выглядит так.

On Error resume next 
Set currItem = ActiveInspector.currentitem 
on error goto 0 

if curritem is nothing then 

    Set OutMail = CreateItem(0) 
    With OutMail 
     .To = "" 
     .CC = "" 
     .BCC = "" 
     .Subject = "PRINT SCREEN" 
     .Set olInsp = .GetInspector 
     .Set wdDoc = olInsp.WordEditor 
     .Set oRng = wdDoc.Range 
     oRng.collapse 1 
     oRng.Paste 
     .Display 
    End With 

Else 
    If curritem.class = olmail 
     if curritem.subject = "PRINT SCREEN" then 
      Set outMail = curritem 

      ' code to append print screen to body of curritem 

     End If 
    End If 
End If 
+0

Привет, спасибо за ваш ответ, но он не работает. Я до сих пор только один пасты из буфера обмена, но я все равно буду искать несколько пасты. – wittman