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
Répondre
É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
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
Pouvez-vous poster votre code actuel? – 0m3r
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