View Single Post
 
Old 03-24-2021, 09:03 AM
dlinto dlinto is offline Windows 10 Office 2019
Novice
 
Join Date: Mar 2021
Posts: 2
dlinto is on a distinguished road
Default Split a Word document in "n" pages

Hi, I would like any help, or some code, the idea is split word documents in "n" pages, respecting headers and footers also section break, each document has 2 break section and "n" break pages, I was trying to put a Wilcard "FIN" at the end of each document, but I have some trouble with my excel document where I send the "name word documents" massively.

Thanks in advance,

Code:
Option Explicit
Sub Word_Individuales()
Dim mArchivo As Variant, fdocument As Document
Dim miExcel As String, target As Variant, obSQL As String
Dim cnn As Object, dataread As Object, filas As Long
Dim i As Long, iname As Variant, midoc As Document
Dim miArchivo As String, campo As String, miCarpeta As Variant

Dim paginasDocumento As Integer
Dim totalPaginas As Integer
Dim pagActual As Integer
Dim nombreDocs As String

Dim lngStart As Long
Dim lngEnd As Long
Dim lngDocNum As Long
Dim docOld As Document
Dim docNew As Document

Set fdocument = ThisDocument

Set mArchivo = Application.FileDialog(msoFileDialogOpen)
    
If mArchivo.Show = 0 Then Exit Sub
    miExcel = mArchivo.SelectedItems(1)

Set miCarpeta = Application.FileDialog(msoFileDialogFolderPicker)

If miCarpeta.Show = 0 Then Exit Sub
    miCarpeta = Application.FileDialog(msoFileDialogFolderPicker).SelectedItems(1) & "\"

Set target = Documents.Add

obSQL = "SELECT [BBDD$].[INFORME] FROM [BBDD$]"

Set cnn = New ADODB.Connection
With cnn
    .Provider = "Microsoft.ACE.OLEDB.12.0"
    .Connectionstring = "DATA SOURCE=" & miExcel
    .Properties("Extended Properties") = "Excel 8.0"
    .Open
End With

Set dataread = New ADODB.Recordset
With dataread
    .Source = obSQL
    .ActiveConnection = cnn
    .CursorLocation = adUseClient
    .CursorType = adOpenForwardOnly
    .LockType = adLockReadOnly
    .Open
End With

dataread.MoveFirst

filas = dataread.RecordCount
Selection.InsertAfter dataread.Fields(0)

Do Until dataread.EOF
    dataread.MoveNext

If dataread.EOF = "Verdadero" Then Exit Do
    campo = Replace(dataread.Fields(0), "-", " ")
    Selection.InsertAfter Chr(11) & campo
Loop

Selection.ConvertToTable Separator:=wdSeparateByDefaultListSeparator, _
numcolumns:=1, Numrows:=filas, AutoFitBehavior:=wdAutoFitFixed

Set midoc = ActiveDocument

pagActual = 1

    Do
        Set iname = midoc.Tables(1).Cell(i, 1).Range

        miArchivo = Mid(Replace(miCarpeta & iname.Text, Chr(13), ""), 1, _
        Len(Replace(miCarpeta & iname.Text, Chr(13), "")) - 1)
    
    lngStart = 1
    Set docOld = fdocument
       ' ActiveWindow.Selection.HomeKey Unit:=wdStory
    With Selection.Find
     'With docOld
        
        '.ClearFormatting
        .Text = "Hacer de conocimiento*^13"
        .MatchWildcards = True
        .Wrap = wdFindStop
        If i = midoc.Tables(1).Rows.Count Then Exit Sub
        
            Selection.Collapse Direction:=wdCollapseEnd
            lngEnd = Selection.End
            ' Copy the "section"
            docOld.Range(lngStart, lngEnd).Copy
            'Create a new document to paste text from clipboard.
            Set docNew = Documents.Add
            Selection.Paste
            ' Save the new document
            lngDocNum = lngDocNum + 1
            docNew.SaveAs FileName:="Section_" & lngDocNum & ".docx", _
                FileFormat:=wdFormatXMLDocument
            docNew.Close
            ' set new start
            lngStart = lngEnd + 1
    End With
   
pagActual = pagActual + paginasDocumento
    i = i + 1
    Loop Until i = midoc.Tables(1).Rows.Count

ActiveDocument.Close SaveChanges:=False
End Sub
Reply With Quote