2017-07-18 1 views
0

J'ai un formulaire qui est envoyé aux utilisateurs pour compléter et soumettre électroniquement, qui envoie simplement un email automatisé avec le document en pièce jointe. Pour joindre le document dans l'e-mail, il enregistre d'abord sur le bureau des utilisateurs automatiquement. Ce que je veux faire est de trouver un moyen de supprimer ce document après sa soumission. J'ai trouvé quelques exemples en ligne mais aucun n'a fonctionné pour moi, et franchement je ne vois pas comment cela fonctionnerait si vous avez une ligne ActiveDocument.Close False suivie de la ligne pour supprimer le chemin du fichier, le document se ferme et la macro ne fonctionne plus aussi loin que je peux imaginer.Supprimer activedocument Word 2013

J'ai trouvé 1 réponse non marqué à une question d'un autre utilisateur: Delete doc when macro finishes

Sub DeleteCurrentDoc() 

    Dim Doc1 As Document 
    Dim deletepath As String 


    'get path of this document to delete it later 
    deletepath = ActiveDocument.FullName 

    'Close the document we are going to delete (Word should remain Open 
    ActiveDocument.Close False 

    'Delete it 
    Kill (deletepath) 

    'Tidy up and close Word (Optional Line, delete if necessary) 
    Application.Quit 

    End Sub 

et un autre sur word.tips.net: https://wordribbon.tips.net/T011642_Deleting_the_Open_Document_File

Sub DeleteThisFile() 
    Dim MyFile As String 

    MyFile = ActiveDocument.Path & "\" & ActiveDocument.Name 
    If MsgBox(MyFile & " will be deleted permanently", _ 
     vbYesNo, "Delete this File?") = vbYes Then 
     ActiveDocument.Close (wdDoNotSaveChanges) 
     Kill MyFile 
    End If 
End Sub 

J'ai essayé de regarder dans un code ouvrir un nouveau document et ajouter une macro à chaque fois, mais je pense que c'est entrer dans un territoire indésirable. Je voudrais vraiment trouver un moyen de supprimer le fichier du PC de l'utilisateur, car ils ont seulement accès à un seul formulaire sur demande. J'utilise Word 2013, je ne suis pas sûr si les exemples ci-dessus fonctionnent dans les versions précédentes et pas à moi, Est-ce possible?

nous vous remercions de votre aide.

MISE À JOUR Je tente une solution de contournement actuellement où le document enregistrer en tant que fichier en lecture seule pour l'utilisateur après envoie la pièce jointe, de cette façon ils peuvent épargner pour leurs dossiers, je suppose. Bien que la protection que je mets dans le classeur pour qu'il soit en lecture seule ne s'applique pas, elle revient à la protection du fichier original et je ne peux pas savoir pourquoi.

`ActiveDocument.SaveAs2 FileName:="C:\Users\" & curUser & "\Desktop\My User Request_" & _ 
Format(Date, "mm.dd.yy") & ".docx", fileformat:=wdFormatDocumentDefault 
Selection.HomeKey wdStory 
With ActiveDocument 
    .Protect 3, Password:="password" 
    .Save 
End With` 

Ce que je fais ici est à nouveau enregistrer avec un nom de fichier différent et comme un classeur activé non macro, je puis supprimez le fichier temporaire j'ai enregistré à l'origine à leur ordinateur de bureau requis pour envoyer la pièce jointe, laissant avec seulement une copie du formulaire qu'ils ont rempli et qu'ils ne peuvent plus modifier.

J'ai essayé plusieurs façons d'ajouter la protection, puis j'ai sauvegardé le fichier et à chaque fois que j'ouvre le docx, la protection est toujours au format seulement et non en lecture seule.

Idéalement, j'aimerais vraiment savoir comment supprimer le document activé afin de pouvoir enregistrer une copie pdf sur le bureau des utilisateurs, puis supprimer le document Word.

Répondre

0

Ce code, procédez comme suit:

  • Ouvrir une nouvelle instance de Word
  • Copier le contenu de macro permettent doc à la nouvelle instance de mot
  • sauver la nouvelle instance doc dans l'emplacement temporaire
  • il supprimera alors le nouveau mot d'instance doc de l'emplacement temporaire
  • fermer la nouvelle instance de mot
  • fermer la macro permet mot doc

Voir le code ci-dessous:

Option Explicit 

    Sub SaveAndDeleteBeforeClosing() 

     'Tested and working well with Office 2010 

     Dim FormDocument As Document 
     'Activedocument can be changed to reference a specific document name. 
     'Set FormDocument = Documents("Some Doc Name") 
     Set FormDocument = ActiveDocument 

     'Opening new instance of Word 
     Dim WordProg As Word.Application 
     Set WordProg = CreateObject("Word.Application") 
     WordProg.Application.Visible = False 

     'Adding a new document toi the new instance of Word 
     WordProg.Documents.Add Template:="Normal", NewTemplate:=False, DocumentType:=0 
     Dim WordDoc As Document 
     Set WordDoc = WordProg.Documents(WordProg.Documents.Count) 

     'Copy contents of Macro Document to new document 
     FormDocument.Content.Copy 
     WordDoc.Range.Paste 

     'Use this to as a sanity check to see if everything is copied over correctly 
     'otherwsie you will need to play around with the paste options 
     WordProg.Visible = True 

     'Saving New instance word doc to temp location 

     Dim FileNameString As String 
     'Enter your desired file name here 
     FileNameString = "Some Doc Name" 
     Dim FilePathString As String 
     'Temp file for deleting 
     FilePathString = "C:\Temp\" & FileNameString & ".docx" 

     WordDoc.SaveAs2 FileName:=FilePathString, FileFormat:= _ 
      wdFormatDocumentDefault, LockComments:=False, Password:="", AddToRecentFiles _ 
      :=True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts _ 
      :=False, SaveNativePictureFormat:=False, SaveFormsData:=False, _ 
      SaveAsAOCELetter:=False, CompatibilityMode:=14 

     'Closing new instance word document 
     WordDoc.Close 

     'Some code to send the file as a email 
     ' 
     ' 
     ' 
     ' 
     ' 
     'delete the file from the C:\Temp\ folder 
     Kill (FilePathString) 

     'Quitting the temp word application 
     WordProg.Application.Quit 
     'Quitting the word application inwhich the macro is stored 
     Application.Quit False 

    End Sub 
+0

Cela n'a pas supprimé le fichier à partir du dossier TEMP. C'est essentiellement le même code que ci-dessus avec la ligne ajoutée à enregistrer sous, qui est déjà intégrée dans le code pour envoyer la pièce jointe de l'email (elle doit être sauvegardée avant l'envoi). tout le code s'arrête à la fermeture du document, dans ce cas à la ligne 'FormDocument.Close'. Par la suite, le fichier n'est pas supprimé via 'Kill' ​​et l'application ne se ferme pas non plus. Encore une fois, je suppose que le document contenant le code VBA lui-même a été supprimé à ce stade. Donc, quelqu'un sait-il encore si cela diffère de 2013? – Awill

+0

@Awill s'il vous plaît essayer ma mise à jour anser –

+0

@Awill, rappelez-vous juste de ne pas évoluer votre question que votre exigence ou idée change. Votre question était de ** supprimer le mot activedocument 2013 **, qui a été répondu. Une autre question est alors d'enregistrer puis d'envoyer le fichier original ou d'enregistrer en pdf etc –