Ошибка выполнения при открытии часто используемого шаблона

У меня есть почтовый инструмент для создания шаблонов Outlook. Шаблоны хранятся как OLEObjects на одном из рабочих листов.

Чтобы использовать шаблоны, я создаю их копию в папке Temp. После этого инструмент ссылается на него напрямую и открывается с помощью CreateItemFromTemplate. Это работает только на моем ПК. Другие сотрудники моей компании получают сообщение об ошибке.

Код, воссоздающий объект OLE:

Sub RecreateObject(ObjectName As String, TemplateName As String) 'creates a     copy of the template stored in config in the users temp folder so that we can reference it from hard drive

Dim objShell As Object
Dim objFolder As Variant
Dim objFolderItem As Variant
Dim oleObj As OLEObject

Set objShell = CreateObject("shell.application")
Set objFolder = objShell.Namespace(Environ("USERPROFILE") & "\Documents" & Application.PathSeparator)
Set objFolderItem = objFolder.Self
Set oleObj = wsConfig.OLEObjects(ObjectName)

'On Error GoTo Error1:

oleObj.Copy

If Dir(CStr(Environ("USERPROFILE") & "\Documents\" & TemplateName & ".oft"), vbDirectory) = vbNullString Then
     objFolderItem.InvokeVerb ("Paste")
Else
    Kill Environ("USERPROFILE") & "\Documents\" & TemplateName & ".oft"
    oleObj.Copy
    objFolderItem.InvokeVerb ("Paste")
End If

EndThisSub:
Set objShell = Nothing
Set objFolder = Nothing
Set objFolderItem = Nothing
Set oleObj = Nothing
Exit Sub

Error1:
MsgBox "Please re-open this file - template recreation failed."
GoTo EndThisSub:

End Sub

Код открытия шаблона:

Sub OpenTemplate(TemplateName As String, InsHeight As Long, InsWidth As Long, InsTop As Long, InsLeft As Long)
    Dim response
    Dim varEditedTempBody As Variant, varEditedTempSubject As Variant
        'On Error GoTo Error1:
        Set objOutlook = CreateObject("Outlook.Application")
        'On Error GoTo Error2:
        If objMail Is Nothing Then 'checks if any mails opened, if not fires procedure
                If curProcess = AddingTemplate Then
                    Set objMail = objOutlook.CreateItem(0)
                    Set objInspector = objMail.GetInspector
                        objMail.Display
                        objMail.Body = "" 'clearing the automatic signature
                End If
                If curProcess = EditingTemplate Then
                    Set objMail = objOutlook.CreateItemFromTemplate(Environ("USERPROFILE") & "\Documents\" & frmTemplates.Controls(TemplateName).Value & ".oft")
                    'clearing the automatic signature by copying in the template after displaying
                    varEditedTempBody = objMail.HTMLBody
                    varEditedTempSubject = objMail.Subject
                    Set objMail = objOutlook.CreateItemFromTemplate(Environ("USERPROFILE") & "\Documents\"  & frmTemplates.Controls(TemplateName).Value & ".oft")
                        With objMail
                            .Display
                            .HTMLBody = varEditedTempBody
                            .Subject = varEditedTempSubject
                        End With
                    Set objInspector = objMail.GetInspector
                End If
                With objInspector
                    .WindowState = 2
                    .Height = InsHeight
                    .Width = InsWidth
                    .Top = InsTop
                    .Left = InsLeft
                End With
        Else
           response = MsgBox("A mail template is already opened. Would you like to proceed and close it without save?", vbYesNo)
                If response = vbYes Then 'if user agrees to closing  procedure fires
                    Call CloseTemplate
                    If curProcess = AddingTemplate Then
                        Set objMail = objOutlook.CreateItem(0)
                        Set objInspector = objMail.GetInspector
                            objMail.Display
                            objMail.Body = "" 'clearing the automatic signature
                    End If
                    If curProcess = EditingTemplate Then
                        Set objMail = objOutlook.CreateItemFromTemplate(Environ("USERPROFILE") & "\Documents" & Application.PathSeparator & frmTemplates.Controls(TemplateName).Value & ".oft")
                        varEditedTempBody = objMail.HTMLBody
                        varEditedTempSubject = objMail.Subject
                        Set objMail = objOutlook.CreateItemFromTemplate(Environ("USERPROFILE") & "\Documents" & Application.PathSeparator & frmTemplates.Controls(TemplateName).Value & ".oft")
                            With objMail
                                .Display
                                .HTMLBody = varEditedTempBody
                                .Subject = varEditedTempSubject
                            End With
                        Set objInspector = objMail.GetInspector
                    End If
                    With objInspector
                        .WindowState = 2
                        .Height = InsHeight
                        .Width = InsWidth
                        .Top = InsTop
                        .Left = InsLeft
                    End With
                Else
                    objMail.Display
                    Exit Sub
                End If
        End If

 ExitThisSub:
        Exit Sub
Error1:
        MsgBox "Cannot open the Outlook application. Please note that mailer uses Outlook by default and without it it's not possible to use the program."
        GoTo ExitThisSub:

Error2:
        MsgBox "The template cannot be opened from hard drive. Please contact ...."
        GoTo ExitThisSub:
End Sub

Я получаю ошибку в этой строке:

 Set objMail = objOutlook.CreateItemFromTemplate(Environ("USERPROFILE") & "\Documents\" & frmTemplates.Controls(TemplateName).Value & ".oft")

говоря: ошибка времени выполнения '-2147286960 (80030050)' Не удается открыть файл /path/ . файл может не существовать, у вас может не быть прав на его открытие...

Я читал об этом, и было предположение, что экземпляр objOutlook может каким-то образом заблокировать файл. Поэтому я везде отключал его после игры с шаблонами или их воссоздания, но он все равно возвращал эту ошибку.


person szczepan077    schedule 22.07.2016    source источник
comment
Что произойдет, если вы укажете прямой путь, например C:\Users\Om3r\Documents?   -  person 0m3r    schedule 23.07.2016
comment
Привет. Извините за поздний ответ - в основном это та же ошибка - также, если я пытаюсь открыть файл .oft из Windows, я получаю аналогичную ошибку, говорящую о том, что файл может не существовать, у вас может не быть разрешения на его открытие. Кажется, дело в доступе к файлу вообще.   -  person szczepan077    schedule 03.08.2016
comment
frmTemplates нигде не заявлен?   -  person tomatoeshift    schedule 30.12.2020
comment
Кроме того, когда вы добавляете .oft в качестве объекта OLE в книгу, запомните имя файла .oft. Затем, когда вы oleObj.Copy и objFolderItem.InvokeVerb ("Paste") , он получает свое исходное имя (имя, которое было при импорте).   -  person tomatoeshift    schedule 30.12.2020


Ответы (1)


Ваш файл или каталог доступен только для чтения. Измените свойства каталога и все.

person user8022673    schedule 17.05.2017