PDA

View Full Version : Macro Word - modifica batch di hyperlink


jstef
14-11-2007, 16:29
Ciao,

Qualcuno sa come modificare i percorsi all'interno dei "collegamenti ipertestuali" di documenti word, in modalità batch?
Per intenderci quelli che compaiono con la sottolineatura e in blu all'interno del documento.

Si tratta ad esempio di puntamenti a \\nomeserver\nomeshare\path\file.ext che dovrei modificare in X:\path\nomefile.ext, o altre sostituzioni, il tutto su un gran numero di documenti word in diverse cartelle del file server...

Credo che una macro VBS farebbe al caso mio ma non la so scrivere :(

MarcoGG
16-11-2007, 13:08
Interessante sta cosa ! :)
Mai fatto nulla del genere, perciò... ti aiuterò. :D

Quello che chiedi non è certo una soluzione immediata... :O

Andiamo con ordine :
1. Crea una cartella di Prova, in cui metti file word che contengono hyperlinks... NON usare subito il codice con i file doc che devi realmente modificare !

2. Crea un nuovo documento Word, che chiamerai "BATCH.doc". Il nome deve essere esattamente questo...

3. Il BATCH.doc, che conterrà le routine di batch, deve essere messo nella directory più "alta", la cartella di Prova, che a sua volta conterrà altre sotto-dir e vari file .doc da modificare...

4. Apri BATCH.doc, e crea un solo pulsante CommandButton.

5. Entra nell'editor VBA, poi Menu Strumenti / Riferimenti /
Cerca nei riferimenti disponibili "Microsoft Scripting Runtime", selezionalo e poi OK.

6. Sempre nell'editor VBA crea un nuovo Modulo [ Project(BATCH) / Inserisci / Modulo ]. In questo modulo incolla il seguente codice VBA :

Public Collezione As Scripting.Dictionary

Public Function GetFiles(strPath As String, dctDict As Scripting.Dictionary, Optional blnRecursive As Boolean) As Boolean

Dim fsoSysObj As Scripting.FileSystemObject
Dim fdrFolder As Scripting.Folder
Dim fdrSubFolder As Scripting.Folder
Dim filFile As Scripting.File

Set fsoSysObj = New Scripting.FileSystemObject

On Error Resume Next
Set fdrFolder = fsoSysObj.GetFolder(strPath)
If Err <> 0 Then
GetFiles = False
GoTo GetFiles_End
End If
On Error GoTo 0
For Each filFile In fdrFolder.Files
dctDict.Add filFile.Path, filFile.Path
Next filFile
If blnRecursive Then
For Each fdrSubFolder In fdrFolder.SubFolders
GetFiles fdrSubFolder.Path, dctDict, True
Next fdrSubFolder
End If
GetFiles = True
GetFiles_End:
Exit Function

End Function

7. Al Click del pulsante precedentemente creato associa il seguente codice VBA :

Private Sub CommandButton1_Click()

Dim varItem As Variant
Dim strDirPath As String
strDirPath = ThisDocument.Path & "\"

Set Collezione = New Scripting.Dictionary
Dim wordapp As Word.Application
If GetFiles(strDirPath, Collezione, True) Then
For Each varItem In Collezione
If Right(CStr(varItem), 9) <> "BATCH.doc" And Right(CStr(varItem), 4) = ".doc" Then
MsgBox varItem
Dim worddoc As Word.Document
Set wordapp = GetObject(, "Word.Application")
Set worddoc = wordapp.Documents.Open(varItem)
Dim h As Hyperlink
For Each h In worddoc.Hyperlinks
h.Address = "http://www.nuovo_address.com"
h.TextToDisplay = h.Address
Next
worddoc.Save
worddoc.Close
Set worddoc = Nothing
End If
Next
End If

End Sub

Premendo il tasto il BATCH andrà a cercare tutti gli hyperlink in tutti i file .doc contenuti nella dir e nelle sotto-dir del BATCH.doc, e li sovrascriverà... Mica male, no ? :D

Arriva fin qui intanto.
Poi vedremo cosa sostituire alla riga rossa per eseguire esattamente ciò di cui hai bisogno... Prova... ;)

jstef
16-11-2007, 14:19
1. Crea una cartella di Prova, in cui metti file word che contengono hyperlinks... NON usare subito il codice con i file doc che devi realmente modificare ! ;)


For Each h In worddoc.Hyperlinks
h.Address = "http://www.nuovo_address.com"
h.TextToDisplay = h.Address
Next


Premendo il tasto il BATCH andrà a cercare tutti gli hyperlink in tutti i file .doc contenuti nella dir e nelle sotto-dir del BATCH.doc, e li sovrascriverà... Mica male, no ? :D

:):) Ottimo, immagino che ti sia divertito anche tu :)

Arriva fin qui intanto.
Poi vedremo cosa sostituire alla riga rossa per eseguire esattamente ciò di cui hai bisogno... Prova... ;)
Per il momento grazie mille, Lunedì mattina torno al lavoro e ci provo senz'altro e poi ti aggiorno :)
Ho l'impressione che occorrerà trovare il modo di specificare la stringa da sostituire, e quella nuova, ad es. \\nomeserver\share da sostituire in F:\, all'interno degli hyperlinks... non dovrebbe essere difficile (per te ;)).
Intanto proviamo, a lunedì :)

MarcoGG
16-11-2007, 18:04
:):) Ottimo, immagino che ti sia divertito anche tu :)

Per il momento grazie mille, Lunedì mattina torno al lavoro e ci provo senz'altro e poi ti aggiorno :)
Ho l'impressione che occorrerà trovare il modo di specificare la stringa da sostituire, e quella nuova, ad es. \\nomeserver\share da sostituire in F:\, all'interno degli hyperlinks... non dovrebbe essere difficile (per te ;)).
Intanto proviamo, a lunedì :)


Io, da pazzi. :D

In effetti al 99% ci siamo. Ovviamente al lavoro avete Office 2003 o 2007, oso sperare... Non mi dire '97 !

jstef
16-11-2007, 18:49
Office XP ;) quelle macro funzionano!

zio_tom53
03-04-2018, 14:42
riapro questa vecchisima discussione...
la procedura l'ho aggiornata ad i nuovi file .docx e .docm
però dovrei fare una cosa un po' diversa
vorrei ELIMINARE gli Hyperlinks dai documento Word
ho provato ad inserire h.Delete, al posto delle rinomina del link:

For Each h In worddoc.Hyperlinks
h.Delete
Next

in debug ci passa, li scansiona tutti, ma non li cancella
un aiuto......

PS: un libro... documentazione ecc. su VBA con Word ..... link.... libri ecc. (io uso la 2010)

zio_tom53
03-04-2018, 15:57
ho trovato questa procedura, che mi cancella gli Hyperlinks
Sub Canc_Hyperlinks()
With ThisDocument
While .Hyperlinks.Count > 0
.Hyperlinks(1).Delete
Wend
End With
Application.Options.AutoFormatAsYouTypeReplaceHyperlinks = False
End Sub

vorrei però cambiare la formattazione del testo, dove c'era l'Hyperlink
dato che una volta levato l'Hyperlink, il testo torna normale e non evidenziato