salvare file word



  • salvare file word
    di rita (utente non iscritto) data: 26/02/2013 11:39:59

    quesito,
    da un file excel arrivo ad aprire un file word
    ora e' possibile secondo voi automatizzare questo, ossia aprire da excel il file word e salvare per ogni pagina presente in word un singolo file.
    mi spiego meglio ,,,apro il file word da excel, salvo la prima pagina in un file poi la seconda etc.
    secondo voi si puo' fare?



  • di HarryBosch data: 26/02/2013 18:39:58

    Si può fare; questo link del supporto Microsoft risponde proprio alla tua richiesta:
    h t t p://support.microsoft.com/kb/306348/it

    Ricordati di modificare il percorso dove andranno salvati i file e di inserire il nome che assumeranno.
     
    Sub BreakOnPage ()
        Application.Browser.Target = wdBrowsePage
        
        'ciclo dalla prima all'ultima pagina
        Per i = 1 a ActiveDocument.BuiltInDocumentProperties ("Numero di pagine")
          
           'seleziono e copio il testo negli appunti
           ActiveDocument.Bookmarks (" page"). Range.Copy
    
           'creo un nuovo file e incollo gli appunti del foglio
           Documents.Add
           Selection.Paste
           Selection.TypeBackspace
           
           'imposto il percorso di salvataggio del file creato
           ChangeFileOpenDirectory "C:Desktopcartella"
           DocNum DocNum = + 1
           'salvo il file con nome: esempio "foglio_1", "foglio_2" ecc...
           ActiveDocument.SaveAs FileName: = "foglio_" & DocNum & ". Doc"
    
           ActiveDocument.Close
           Application.Browser.Next
        Next i
    
        SaveChanges ActiveDocument.Close: = wdDoNotSaveChanges
    End Sub



  • di rita (utente non iscritto) data: 27/02/2013 08:17:17

    ciao, ho integrato una parte mancante nella istruzione che mi avevi postato ossia la maschera dalla quale scelgo il file word da aprire ma complessivamente non funziona e non so cosa sia

     
    Sub BreakOnPage()
    filetoopen = Application.GetOpenFilename("DOC Files (*.DOC), *.DOC", , "Selezionare il percorso ed il file DOC ", "Apri", False)
    If filetoopen = False Then Exit Sub
    Set wdApp = CreateObject("Word.Application")
    wdApp.Documents.Open filetoopen
    '   Application.Browser.Target = wdBrowsePage
       For i = 1 To ActiveDocument.BuiltinDocumentProperties("NUMERO DI PAGINE")
          
          'Select and copy the text to the clipboard.
          ActiveDocument.Bookmarks("page").Range.Copy
    
          ' Open new document to paste the content of the clipboard into.
          Documents.Add
          Selection.Paste
          Selection.TypeBackspace
          'ChangeFileOpenDirectory "C:"    ..... qui ho messo l'apice perche' non funziona
          DocNum = DocNum + 1
          ActiveDocument.SaveAs Filename:="C:" & "test_" & DocNum & ".doc"
          ActiveDocument.Close
          ' Move the selection to the next page in the document.
          Application.Browser.Next
       Next i
       ActiveDocument.Close savechanges:=wdDoNotSaveChanges
    End Sub



  • di Vecchio Frac data: 27/02/2013 10:55:54

    Secondo me la proprietà da specificare per il numero di pagine è
    ActiveDocument.BuiltInDocumentProperties("Number of Pages")
    e non quello che risulta dalla traduzione automatica della pagina internet specificata ("Numero di pagine" è sbagliato).
    Cosa significa "qui ho messo l'apice perche' non funziona"? esattamente cos'è che non funziona?
    Inoltre non devi commentare
    Application.Browser.Target = wdBrowsePage
    perchè altrimenti non avrai, successivamente, lo scroll pagina per pagina.





  • di rita (utente non iscritto) data: 27/02/2013 14:06:32

    ciao, ho modificato la sub (postata qui sotto) ma mi si impalla sull'istruzione

    For i = 1 To ActiveDocument.BuiltinDocumentProperties("Number of Pages") e mi dice "necessario oggetto"

    non so propro dove intervenire

     
    Sub BreakOnPage()
    filetoopen = Application.GetOpenFilename("DOC Files (*.DOC), *.DOC", , "Selezionare il percorso ed il file DOC ", "Apri", False)
    If filetoopen = False Then Exit Sub
    Set wdApp = CreateObject("Word.Application")
    wdApp.Documents.Open filetoopen
       For i = 1 To ActiveDocument.BuiltinDocumentProperties("Number of Pages")
          ActiveDocument.Bookmarks("page").Range.Copy
          Documents.Add
          Selection.Paste
          Selection.TypeBackspace
          DocNum = DocNum + 1
          ActiveDocument.SaveAs Filename:="C:" & "test_" & DocNum & ".doc"
          ActiveDocument.Close
       Next i
       ActiveDocument.Close savechanges:=wdDoNotSaveChanges
    End Sub
    



  • di rita (utente non iscritto) data: 27/02/2013 14:23:50

    ho capito parzialmente l'inghippo ossia
    l'istruzione qui sotto posta in una macro all'interno del file word e lanciata funziona benissimo
    a me manca l'aggancio iniziale ossia da excel selezionare un file word e poi dividere
    secondo me
    '''''''''''''''''''''''''
    filetoopen = Application.GetOpenFilename("DOC Files (*.DOC), *.DOC", , "Selezionare il percorso ed il file DOC ", "Apri", False)
    If filetoopen = False Then Exit Sub
    Set wdApp = CreateObject("Word.Application")
    wdApp.Documents.Open filetoopen

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''

    non gli piace

     
    Sub BreakOnPage()
    Application.Browser.Target = wdBrowsePage
    For i = 1 To ActiveDocument.BuiltInDocumentProperties("Number of Pages")
    ActiveDocument.Bookmarks("page").Range.Copy
    Documents.Add
    Selection.Paste
    Selection.TypeBackspace
    ChangeFileOpenDirectory "C:"
    DocNum = DocNum + 1
    ActiveDocument.SaveAs FileName:="test_" & DocNum & ".doc"
    ActiveDocument.Close
    Application.Browser.Next
    Next i
    ActiveDocument.Close savechanges:=wdDoNotSaveChanges
    End Sub
    



  • di HarryBosch data: 27/02/2013 18:54:24

    Effettivamente ti ho riportato in modo errato il codice che ti avevo indicato sul supporto Microsoft; oltre al "Number of Pages" c'erano anche altri errori dovuti ad un errata copiatura del codice (che in automatico ha tradotto tutto il testo...).

    In ogni caso, come hai detto giustamente, il codice funziona bene soltanto se lanciato dall'applicativo Word. Le prime righe vanno bene, ma si dovrà istanziare l'oggetto Document di Word.

    Appena posso provo ad aiutarti a trovare la giusta strada, perché credo che non ti serva richiamare la macro su Word.. presumo che il file da dividere possa essere di volta in volta diverso



  • di HarryBosch data: 07/03/2013 00:40:51

    Ho trovato un pò di tempo per incrementare le mie conoscenze su Word visto che effettivamente conosco poco le relative librerie.
    Smanettando un pò in giro, e sbattendo la testa su quello che sembra essere un vero e proprio bug, sono riuscito a trovare una soluzione, che probabilmente può anche essere migliorata; eventuali ottimizzazioni sono senz'altro gradite.

    IMPORTANTE: prima di lanciare la routine bisogna istanziare il riferimento alla libreria di Word (relativa alla versione in uso), tramite il menù "Strumenti" dell'editor vba.

    Per quanto riguarda il bug, ho scoperto che la routine funziona la prima volta che viene lanciata. Anche se al termine l'applicazione viene chiusa, sembra che rimanga in memoria comunque un riferimento a Word. E alla successiva chiamata si verificava un errore.
    Per correggere l'errore ho trovato questi due articoli interessanti che parlano dell'argomento:
    h t t p://support.microsoft.com/?id=188546
    h t t p://support.microsoft.com/?id=189618

    In sostanza ho aggiunto un riferimento wrdApp a tutte le chiamate interne della routine.

    Il codice permette di aprire un file Word e creare una copia sempre in word per ogni pagina. Al momento le copie verranno create nella stessa cartella del file word da dividere; percorso e nome possono essere cambiati come da commento che ho inserito.
     
    Option Explicit
    
    Sub dividi_file_word()
        Dim filetoopen, i As Integer
        Dim wrdApp As Word.Application
        Dim pagina As Object
        Dim nome As String, percorso As String
        Dim pag As Integer, inizio As Long, fine As Long
        Dim doc_a As Document, doc_da As Document
    
        filetoopen = Application.GetOpenFilename("DOC Files (*.DOC), *.DOC", , "Selezionare il percorso ed il file DOC ", "Apri", False)
        If filetoopen = False Then Exit Sub
        Set wrdApp = CreateObject("Word.Application")
    
        With wrdApp
            .Documents.Open filetoopen
            .Visible = True
            .Activate
    
        Set doc_da = .ActiveDocument
        'nome che assumeranno i singoli file
        nome = "Pagina_"
        'percorso di salvataggio (cartella dove si trova il file da dividere)
        percorso = .ActiveDocument.Path
    
        Set pagina = doc_da.Range(0, 0)
        inizio = pagina.Start
        fine = pagina.GoToNext(wdGoToPage).Start
    
        While inizio <> fine
            pag = pag + 1
    
            pagina.SetRange inizio, fine
            pagina.Copy
            Set doc_a = .Documents.Add
            doc_a.Range.Paste
            doc_a.SaveAs percorso & "" & nome & "_" & pag & ".doc"
            doc_a.Close
            pagina.SetRange fine, fine
            inizio = fine
            fine = pagina.GoToNext(wdGoToPage).Start
    
        Wend
    
        pagina.EndOf wdStory, wdExtend
        pagina.Copy
        Set doc_a = .Documents.Add
        doc_a.Range.Paste
        doc_a.SaveAs percorso & "" & nome & "_" & pag + 1 & ".doc"
        doc_a.Close
    
        .Quit
        End With
        
        Set doc_a = Nothing
        Set doc_da = Nothing
        Set wrdApp = Nothing
    End Sub
    
    



  • di RITA (utente non iscritto) data: 12/03/2013 10:12:42

    come ti avevo detto, l'ho provata e funziona benissimo
    grazie ancora