MACRO Sostituzione segnalibri da excel a word / passaggio da office 2003/2007 a office 2013

Anonimo
2015-03-06T18:37:13+00:00

Salve ho un problema…..

Ho scritto una serie di macro funzionanti che mi permettono di sostituire i segnalibri di word con il contenuto di celle  all’interno di un foglio excel a mezzo VBA….

Premetto che tali macro FUNZIONANO benissimo con le versioni 2003/2007 di Office ma che non funzionano affatto per la versione Office 2013 / 365… e non so perché!!!!!

Le macro in questione si fermano nel momento che debbono sostituire i segnalibri con i valori delle celle…..

Ecco un esempio di macro…

Sub Test()

'

' Test Macro

' Macro registrata il 23/09/2014 da PANCIERA ROBERTO

'

Stringa001 = Range("A1").Value

Stringa002 = Range("A2").Value

Stringa003 = Range("A3").Value

Const sFILENAME As String = "C:\Test\Test.doc"

Set wrdApp = CreateObject("Word.Application")

wrdApp.Visible = True

Set wrdDoc = wrdApp.Documents.Open(sFILENAME)

With wrdDoc

' MI SI FERMA PROPRIO QUI!!!

.Bookmarks("X001").Range.Text = Stringa001

' MI SI FERMA PROPRIO QUI!!!

.Bookmarks("X002").Range.Text = Stringa002

.Bookmarks("X003").Range.Text = Stringa003

End With

End Sub

Il documento word in questione (C:\Test\Test.doc) dovrà avere al suo interno tre segnalibri denominati X001  -  X002  -  X003

il programma mi apre il file word ma SI FERMA Lì E NON SOSTITUISCE IL SEGNALIBRO X001 CON IL VALORE di A1

NB le macro sono state attivate quindi non è lì il problema…

Qualcuno può darmi una mano non so più dove sbattere la testa….

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2015-03-07T17:50:24+00:00

Scusa lo sbotto.....

Comunque ti ringrazio, ho trovato la sopluzione del problema......

i FILE del documenti in word contentente i campi segnalibro erano in SOLA LETTURA

Evidentemente Office 2013 non esegue questo genere di macro se il File in questione e' in sola lettura.....

mentre Office 2003/2007 esegue comunque le sostituzioni.....

Peccato, perche cosi ce sempre il rischio che qualcuno salvi il file con i campi gia' sostituiti (cosa che volevo evitare.....)  dovro tenermi comode, copie di backup dei file word con i campi segnalibro, quando qualcuno me li sovrascrivera'

Grazie ancora dell'interessamento arriverci

La risposta è stata utile?

0 commenti Nessun commento

7 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2015-03-07T17:36:56+00:00

    Ti ringrazio del'interessamento....

    Ma lasciami spiegare....

    <cut>

    Per favore mantieni un contegno educato, grazie.

    Maurizio ti ha dato saggi consigli. Aggiungo due righe.

    Il tuo codice NON è un bel codice... E, come tutte le cose fatte così così, prima o poi danno problemi.

    Qui sotto vedi il tuo codice rielaborato e che funziona su TUTTE le versioni di Excel/Word sulle quali ho provato (dalla 2000 alla 2013).

    Public Sub Test()

        Const sFILENAME As String = "C:\Test\Test.doc"

        Dim wrdAPP As Object

        Dim wrdDoc As Object

        Dim sh As Worksheet

        Dim Stringa001 As String

        Dim Stringa002 As String

        Dim Stringa003 As String

        Set sh = ThisWorkbook.Worksheets("Foglio1")

        With sh

            Stringa001 = .Range("A1").Value

            Stringa002 = .Range("A2").Value

            Stringa003 = .Range("A3").Value

        End With

        Set wrdAPP = CreateObject("Word.Application")

        Set wrdDoc = wrdAPP.Documents.Open(sFILENAME)

        wrdAPP.Visible = True

        With wrdDoc

            .Bookmarks("X001").Range.Text = Stringa001

            .Bookmarks("X002").Range.Text = Stringa002

            .Bookmarks("X003").Range.Text = Stringa003

        End With

        'codice di chiusura omesso

    End Sub

    Io non conosco il tuo contesto e quindi Foglio1 potrebbe essere qualsiasi altro foglio. Dover riscrivere il codice non dovrebbe essere visto come una maledizione/vergogna, ma come una crescita. Se ci spieghi BENE cosa devi fare con 42 macro con centinaia di sostituzioni, casomai troviamo una strada per semplificare il tutto.

    Ovviamente sei libero di fare come vuoi, ma sempre senza essere offensivo. Grazie.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2015-03-07T14:24:55+00:00

    Primo, vedi di calmarti, grazie.

    Poi, cosa vuol dire "mi si blocca"? Puoi essere più specifico? La compilazione segnala qualcosa? Hai provato a eseguire passo passo per verificare esattamente quale istruzione procura il blocco? Nessun messaggio di errore o altro?

    Quanto allo spazio di cui parlavo, credimi, è sempre stato utile. Sin dai tempi antichi. Tanto che se non se ne ha bisogno visivamente lo si mette come carattere nascosto. Perché è utile.

    EDIT:

    Ho riletto il tuo primo post e effettivamente hai già indicato a quale istruzione avviene il blocco. Quindi ritiro la domanda relativa. Tuttavia ancora non capisco cosa intendi con "blocco". Nessun messaggio di errore? Hai ispezionato il documento per verificare se effettivamente il segnalibro è ancora esistente? Hai messo una routine di gestione dell'errore per ottenere numero e descrizione dell'eventuale errore? E, prima di tutto, hai verificato che la compilazione vada a buon fine?

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2015-03-07T13:54:42+00:00

    Ti ringrazio del'interessamento....

    Ma lasciami spiegare....

    i segnalibri in questione da sostituire in Word sono tutti fatti cosi X001  X002 X003 ecc quindi niente spazi intermedi....

    in realta ho fatto un programma che ha circa 3000 celle di imput diverse in un unico foglio di excel

    (in ordine sparso A17, A2943, F300) da cui pescano 42 macro diverse per 42 *.doc diversi, molte con centinaia di sostuzioni (424 sostituzioni).....

    Il programma FUNZIONA in Office 2003/2007 ma se lo lancio con office 2013 mi si BLOCCA alla faccia della retrocompatibilita'..... Microsoft di M*@ë☻A.......

    NON ho intenzione di sostituire 42 macro con centinaia di sostituzioni ciascuna.... sarebbe un lavoro immanne, visto e considerato che con le versioni antecedenti di Office, queste FUNZIONANO.....Microsoft di M*@ë☻A.......

    Grazie Comunque dell'interessamento

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2015-03-07T05:41:57+00:00

    Ciao RobertoPanciera,

    io ho scritto le seguenti funzioni per gestire il testo dei Segnalibri. Le uso da diverso tempo e con diverse versioni e sono sicuro che funzionano correttamente, se il testo nel Segnalibro finisce con uno spazio, che però non va mai aggiunto.

    Intendo:

    1. Testo nel Segnalibro: Pippo<spazio>
    2. Nuovo testo: Pluto (Senza spazio)
    3. Oppure: stringa nulla (""). E il testo del Segnalibrodiventa solo uno spazio.

    Provale e facci sapere. Per ora non posso fare di più.

    ' Legge testo.

    Public Function GetBookmarkText(ByVal Doc As Word.Document _

                                  , ByVal BookmarkName As String) As String

        On Error Resume Next

        With Doc.Bookmarks(BookmarkName)

          GetBookmarkText = Doc.Range(.Start, .End - 1).Text

        End With

    End Function

    ' Scrive testo.

    Public Sub SetBookmarkText(ByVal Doc As Word.Document _

                             , ByVal BookmarkName As String _

                             , ByVal NewText As String)

        On Error Resume Next

        With Doc.Bookmarks(BookmarkName)

          Doc.Range(.Start, .End - 1).Text = NewText

        End With

    End Sub

    La risposta è stata utile?

    0 commenti Nessun commento