2017-08-22 2 views
0

J'ai essayé de trouver un moyen, après avoir effectué un publipostage, de séparer les documents en documents individuels et de les nommer après un élément spécifique, de préférence la première ligne du document. entête. J'ai seulement été capable de trouver des moyens de diviser le document, mais je n'arrive pas à comprendre comment le nommer. Toute aide sur la façon d'écrire le code VBA pour enregistrer un document comme en-tête serait très appréciée.MS Word VBA: Enregistrement d'un document à l'aide de l'en-tête

+0

Pouvez-vous poster votre code actuel? – 0m3r

+0

J'ai ajouté un article séparé à ceci, j'ai compris comment obtenir mon nom de fichier ce que je veux qu'il soit, maintenant le problème est de l'enregistrer. C'est le titre de la question: MS Word VBA: Sauvegarde du fichier, erreur d'exécution 5152 – Cocoberry2526

Répondre

1

Étant donné que vous avez déjà séparé les documents, le code ci-dessous peut leur donner des noms en utilisant leur première phrase.

Private Function DocName(Doc As Document) As String 
    ' 23 Aug 2017 

    Const Illegals As String = "\:/;?*|>""" 
    Static FaultCounter As Integer 
    Dim Fun As String 
    Dim Title As String 
    Dim Ch As String 
    Dim i As Integer 

    Title = Trim(Doc.Sentences(1)) 
    For i = 1 To Len(Title) 
     Ch = Mid(Title, i, 1) 
     If (Asc(Ch) > 31) And (Asc(Ch) < 129) Then 
      If InStr(Illegals, Ch) = 0 Then Fun = Fun & Ch 
     End If 
    Next i 

    If Len(Fun) = 0 Then 
     FaultCounter = FaultCounter + 1 
     Fun = Format(FaultCounter, """Default File Name (""0"")""") 
    End If 

    DocName = Fun 
End Function 

Avant d'enregistrer le fichier, vous pouvez rechercher des doublons. Utilisez la fonction Dir() pour cela et ajoutez un nombre à dupliquer les noms en utilisant le système que j'ai inclus ci-dessus pour nommer les fichiers où la première phrase pourrait être vide.

Vous devrez peut-être également vérifier les caractères non autorisés dans les noms de fichier. J'ai simplement exclu tout ci-dessous ASCII (32) et au-dessus ASCII (128), et puis les connus que Windows n'aime pas. Vous pourriez vouloir modifier cette plage plus loin.

Pour appeler le code d'utilisation de la fonction ci-dessus comme ceci: -

Private Sub GetName() 
    Debug.Print DocName(ActiveDocument) 
End Sub 
0

Ceci est le code que je l'ai jusqu'à présent, j'ai pu trouver hors d'un site très utile, mais le code enregistre comme mot "rapport" que je l'ai mis en ce moment alors que je suis en train de le comprendre, puis le numéro du document.

Option Explicit 

Sub splitter() 

' splitter Macro 

' Macro created by Doug Robbins to save each letter created by a mailmergeas 
a separate file. 
Application.ScreenUpdating = False 
Dim Program As String 
Dim DocName As String 
Dim Letters As Integer, Counter As Integer 

Letters = ActiveDocument.Sections.Count 
Selection.HomeKey Unit:=wdStory 
Counter = 1 
While Counter < Letters 
'program = ActiveDocument.MailMerge.DataSource.DataFields("Program_Outcomes_PlanReport_Name").Value 
DocName = "Reports" & LTrim$(Str$(Counter)) 'Generic name of document 
ActiveDocument.Sections.First.Range.Cut 
Documents.Add 
Selection.Paste 
ActiveDocument.Sections(2).PageSetup.SectionStart = wdSectionContinuous 


ActiveDocument.SaveAs filename:="E:\assessment rubrics\Templates" & "\" & DocName, FileFormat:=wdFormatDocument, LockComments:=False, Password:="", 
AddToRecentFiles:=False, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData:=False,   SaveAsAOCELetter:=False 
ActiveWindow.Close 
Counter = Counter + 1 
Wend 

Application.ScreenUpdating = True 

End Sub