2015-01-23 2 views
0

Эта подпрограмма в приложении Excel vba проработала много лет, вставив подпись Outlook в электронное письмо, прежде чем отображать сообщение электронной почты для отправки (.Display). Это работало в Excel 2007 в XL и 2013 году в Windows 7.Вставка электронной подписи с использованием vba в Excel 2013

Теперь у меня Windows 8.1 и Office 2013 это появляется с ошибкой 91 в моей процедуре ошибок. Может быть, проблема с одной из ссылок? - или некоторые изменения, необходимые в коде? Вся помощь с благодарностью получила!

Sub InsertSig2007(strSigName As String) 

Dim objItem As Object 
Dim objInsp As Outlook.Inspector 
' requires a project reference to the 
' Microsoft Office library 
Dim objCBP As Office.CommandBarPopup 
Dim objCBP2 As Office.CommandBarPopup 
Dim objCBB As Office.CommandBarButton 
Dim colCBControls As Office.CommandBarControls 
Set objInsp = ActiveInspector 
If Not objInsp Is Nothing Then 
    Set objItem = objInsp.CurrentItem 
    If objItem.Class = olMail Then 
    ' get Insert menu 
     Set objCBP = objInsp.CommandBars.ActiveMenuBar.FindControl(, 30005) 
     ' get Signature submenu 
     Set objCBP2 = objCBP.CommandBar.FindControl(, 5608) 
     If Not objCBP2 Is Nothing Then 
      Set colCBControls = objCBP2.Controls 
      For Each objCBB In colCBControls 
      Debug.Print objCBB.Caption 
      If objCBB.Caption = strSigName Then 
       objCBB.Execute ' **** see remarks 
       Exit For 
      End If 
      Next 
     End If 
    End If 
End If 
Set objInsp = Nothing 
Set objItem = Nothing 
Set colCBControls = Nothing 
Set objCBB = Nothing 
Set objCBP = Nothing 
Set objCBP2 = Nothing 

End Sub

+0

выглядит довольно хрупким. В какой строке это происходит? – Bathsheba

ответ

0

«это выходит с ошибкой 91 в моей обычной ошибке» При отладке не используют процедуру об ошибке. Таким образом, вы видите линию с проблемой и можете сказать, что она в вашем вопросе.

Это, вероятно,

Set objCBP = objInsp.CommandBars.ActiveMenuBar.FindControl(, 30005) 

CommandBars.FindControl Method (Office) См «Использование CommandBars в некоторых приложениях Microsoft Office, был заменен новым компонентом ленты пользовательского интерфейса Microsoft Office Fluent.»

Примечание: CommandBars.ExecuteMso Method (Office) работает в 2013 году, но я считаю, что кнопка подписи недоступна.

Вы обязательно найдете замену для своего кода здесь Insert Outlook Signature in mail.

Скорее всего это:

Sub Mail_Outlook_With_Signature_Html_2() 
' Don't forget to copy the function GetBoiler in the module. 
' Working in Office 2000-2013 
    'Dim OutApp As Object 
    Dim OutMail As Object 
    Dim strbody As String 
    Dim SigString As String 
    Dim Signature As String 

    'Set OutApp = CreateObject("Outlook.Application") 
    'Set OutMail = OutApp.CreateItem(0) 

    Set OutMail = CreateItem(0) 

    strbody = "<H3><B>Dear Customer Ron de Bruin</B></H3>" & _ 
       "Please visit this website to download the new version.<br>" & _ 
       "Let me know if you have problems.<br>" & _ 
       "<A HREF=""http://www.rondebruin.nl/tips.htm"">Ron's Excel Page</A>" & _ 
       "<br><br><B>Thank you</B>" 

    'Change only Mysig.htm to the name of your signature 
    SigString = Environ("appdata") & _ 
       "\Microsoft\Signatures\Mysig.htm" 

    If Dir(SigString) <> "" Then 
     Signature = GetBoiler(SigString) 
    Else 
     Signature = "" 
    End If 

    On Error Resume Next 

    With OutMail 
     '.To = "[email protected]" 
     .CC = "" 
     .BCC = "" 
     .Subject = "This is the Subject line" 
     .HTMLBody = strbody & "<br>" & Signature 
     '.Send  
     'or use 
     .Display 
    End With 

    On Error GoTo 0 
    Set OutMail = Nothing 
    'Set OutApp = Nothing 
End Sub 


Function GetBoiler(ByVal sFile As String) As String 
'Dick Kusleika 
    Dim fso As Object 
    Dim ts As Object 
    Set fso = CreateObject("Scripting.FileSystemObject") 
    Set ts = fso.GetFile(sFile).OpenAsTextStream(1, -2) 
    GetBoiler = ts.readall 
    ts.Close 
End Function 
Смежные вопросы