2016-11-16 4 views
2

Новичок здесь. Я создал документ с поддержкой макросов с кнопкой «Отправить». Документ доступен только для чтения, поэтому я пытаюсь сохранить его временным файлом, прикрепить временный файл и удалить его. Достаточно просто, не так ли? Все работает, за исключением того, что не удаляется. Прикрепленный код для кнопки «Отправить». Пожалуйста помоги! Благодарю.Удалить документ после прикрепления к электронной почте

Public Sub SubmitButton_Click() 
Dim OL    As Object 
Dim EmailItem  As Object 
Dim Doc    As Document 
Dim sTempFilePath As String 

Application.ScreenUpdating = False 
sTempFilePath = ("C:\temp\test.doc") 

Set OL = CreateObject("Outlook.Application") 
Set EmailItem = OL.CreateItem(olMailItem) 
Set Doc = ActiveDocument 
ActiveDocument.SaveAs FileName:="C:\temp\test.doc" 
With EmailItem 
    .Subject = "Application For Leave Form" 
    .To = "[email protected]" 
    .Attachments.Add sTempFilePath 
    .Send 
End With 

Application.ScreenUpdating = True 
Set OL = Nothing 
Set EmailItem = Nothing 
Set Doc = Nothing 
ActiveDocument.Close 
Kill sTempFilePath 

End Sub 

Для простоты я достал много кода, и он все еще не удаляет файл. Что случилось с этим?

Public Sub SubmitButton_Click() 
Dim Doc    As Document 
Dim sTempFilePath As String 

sTempFilePath = ("C:\temp\test.doc") 

Set Doc = ActiveDocument 

ActiveDocument.SaveAs FileName:="C:\temp\test.doc" 

ActiveDocument.Close 

Kill sTempFilePath 

End Sub 
+0

Здравствуйте. Проверьте [этот ответ] (http://stackoverflow.com/questions/67835/deleting-a-file-in-vba) и посмотрите, поможет ли он –

+0

. Пожалуйста, обновите свой вопрос и отправьте код –

+0

. Я не знаком с VBA для Word, но, отлаживая код, я заметил, что в строке 'ActiveDocument.Close' вы фактически закрываете документ, на котором выполняется макрос, поэтому' Kill sTempFilePath' никогда не выполняется –

ответ

0

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

Смотрите код для сниппета:

Dim Doc    As Document 
Dim sTempFilePath As String 

sTempFilePath = ("C:\temp\test.doc") 

'the next line copies the active document 
Application.Documents.Add ActiveDocument.FullName 

ActiveDocument.SaveAs FileName:="C:\temp\test.doc" 

ActiveDocument.Close 

Kill sTempFilePath 

Применив это ваш рабочий код, вы бы это:

Public Sub SubmitButton_Click() 
Dim OL    As Object 
Dim EmailItem  As Object 
'Dim Doc    As Document 'not needed 
Dim sTempFilePath As String 

Application.ScreenUpdating = False 
sTempFilePath = ("C:\temp\test.doc") 

Set OL = CreateObject("Outlook.Application") 
Set EmailItem = OL.CreateItem(olMailItem) 
'Set Doc = ActiveDocument ' not needed 
Application.Documents.Add ActiveDocument.FullName 
ActiveDocument.SaveAs FileName:="C:\temp\test.doc" 
With EmailItem 
    .Subject = "Application For Leave Form" 
    .To = "[email protected]" 
    .Attachments.Add sTempFilePath 
    .Send 
End With 

Application.ScreenUpdating = True 
Set OL = Nothing 
Set EmailItem = Nothing 
'Set Doc = Nothing 
ActiveDocument.Close 
Kill sTempFilePath 

End Sub 

Ссылка: http://www.vbaexpress.com/kb/getarticle.php?kb_id=961

+1

Спасибо, ребята! Завтра я снова буду копаться в нем, и я обязательно опубликую результаты. – Mike

+1

Виктор, СПАСИБО. Это сработало отлично. Еще лучше, что он не закрывает оригинал, поэтому пользователь может заполнить его пару раз без повторного открытия. Потрясающие. Мне было интересно, как тяжело было бы переименовать привязанность и строку темы в «Заявка на получение формы - первая последняя» (как в, их имя и фамилия, заполненные в форме Word)? Первое и последнее имя помещается в «Rich Text Content Control» в Word. – Mike

+0

Я рад, что решение разработано для вас. Как я уже упоминал ранее, я мало что знаю о VBA для Word, но я думаю, что вы можете начать с того, что вам нужно [здесь] (https://msdn.microsoft.com/en-us/library/office /ff836891.aspx), в [здесь] (http://stackoverflow.com/questions/29524537/extract-data-from-content-controls-in-word-to-excel) и в [здесь] (http:// /stackoverflow.com/questions/10823874/with-a-word-contentcontrol-datepicker-how-do-i-get-the-value). Если после этого у вас возникнут проблемы, я бы опубликовал еще один вопрос с новой проблемой. Счастливое кодирование :) –

1

использование FileSytemObject() объекта, чтобы сделать копию разыскиваемого файла и, наконец, удалить его

вот пример с поздним связыванием

Public Sub SubmitButton_Click() 
    Dim sTempFilePath As String 

    sTempFilePath = ("C:\temp\test.doc") 

    With CreateObject("Scripting.FileSystemObject") '<--| instantiate a running instance of 'FileSystemObject' object 
     .CopyFile ActiveDocument.FullName, sTempFilePath '<--| copy active document into a new file 
    End With 

    '....code to process sTempFilePath 

    Kill sTempFilePath '<--| and finally... kill it! 

End Sub 
Смежные вопросы