Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

VBA, macro aggiornamento automatico collegamenti ipertestuali presenti in un foglio Excel

Ultimo Aggiornamento: 21/05/2018 10:45
Post: 12
Registrato il: 02/05/2018
Città: MILANO
Età: 34
Utente Junior
2013
OFFLINE
17/05/2018 10:48

Buongiorno, vorrei chiedervi un aiuto. ho creato un file al cui interno ho caricato dei collegamenti ipertestuali e andando a cliccare sul collegamento mi apre correttamente il file.

Successivamente ho fatto delle modifiche al file e ho salvato il File con un nuovo nome, in questo caso andando a cliccare i collegamenti nel nuovo file salvato non funzionano.

Esiste un modo per far riassociare in automatico tutti i collegamenti ipertestuali oppure devo ricaricare uno ad uno tutti i collegamenti?

Allego un immagine in cui si possono vede i collegamenti che ho caricato nel File.



la macro da inserire può funzionare, ma se nel mio caso i vari pdf inseriti nelle varie celle Excel come collegamenti ipertestuali sono "organizzati" in diverse cartelle, come posso modificare la macro?

allego lo screen per far vedere come sono organizzati i miei file pdf collegati al file Excel
Sub hypeRest()
Dim Hyp As Hyperlink, I As Long, hypA, olPath As String, nwPath As String
'
olPath= "\\C:\users\AppData\Roaming\" '<<< L'attuale "percorso" corrotto
nwPath ="\\XenFS01\Gruppi\Qualità\01 SGQ\" '<<< Il "percorso" da ripristinare
For I = 1 To Worksheets.Count
For Each Hyp In Sheets(I).Hyperlinks
hypA = Hyp.Address
Hyp.Address = Replace(hypA, olPath, nwPath, , , vbTextCompare)

Next Hyp
Next I
End Sub



Allego lo screen per far vedere come sono organizzati i miei file pdf collegati al file Excel.


Aprendo ad esempio la cartella ABB avremo altre cartelle suddivise per argomenti


Dentro ogni cartella sono contenuti i vari pdf, andando ad aprire ad esmpio la crtella APPARECCHIATURE MODULARI avremo i vari pdf.





Post: 4.096
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
17/05/2018 11:05

non credo proprio si possa fare, ma sarei lieto di essere smentito

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 23
Registrato il: 13/08/2015
Città: COMO
Età: 60
Utente Junior
excel 2016
OFFLINE
20/05/2018 00:53

Ciao,
ho già affrontato un problema simile , vedi se puoi adattarlo al tuo caso -> Creare collegamenti a files in Excel
[Modificato da ges64 20/05/2018 00:53]
Post: 4.098
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
20/05/2018 10:18

Re:
MAURIZIO1989, 17/05/2018 10.48:


Esiste un modo per far riassociare in automatico tutti i collegamenti ipertestuali oppure devo ricaricare uno ad uno tutti i collegamenti?

La mia risposta era relativa a questa domanda, se invece si tratta di ricreare nuovamente i collegamenti a TUTTI i file di una cartella allora si pò fare tranquillamente, vedi risposta di ges64



----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 2.938
Registrato il: 03/04/2013
Utente Veteran
Excel 2000 - 2013
OFFLINE
20/05/2018 20:40

Buona pomeriggio, MAURIZIO1989.

@MAURIZIO1989, scrive:

... Esiste un modo per far riassociare in automatico tutti i collegamenti ipertestuali ...



Dopo aver preso buona nota della proposta di @ges64, che saluto, con il mio impegno formale di leggere e studuiarne attentamente la proposta, mi permetto di proporti questa soluzione con:

Option Explicit

Sub Assegna_Hyperlinks()
Application.ScreenUpdating = False
Dim NHy As Long, Riga As Long
Dim Nome As String
Const MiaPath As String = "C:\Prova pdf\"
    
    NHy = Range("A" & Rows.Count).End(xlUp).Row
        Range(Cells(1, 1), Cells(NHy, 1)).Clear
    ChDir MiaPath
    Riga = 0
    Nome = Dir("*.PDF")
        If Nome = "" Then Exit Sub
            While Nome <> ""
                Riga = Riga + 1
            Cells(Riga, 1) = MiaPath & Nome
                Cells(Riga, 1).Select
            ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=Cells(Riga, 1)
                Nome = Dir
            Wend
    NHy = Range("A" & Rows.Count).End(xlUp).Row
    Columns("A:A").EntireColumn.AutoFit
Application.ScreenUpdating = True
    Cells(1, 1).Select
End Sub




A disposizione.

Buon fine settimana.

Giuseppe

Windows XP - Excel 2000
Windows 10 - Excel 2013
Post: 12
Registrato il: 02/05/2018
Città: MILANO
Età: 34
Utente Junior
2013
OFFLINE
21/05/2018 08:33

Grazie a tutti per aver risposto alo mio quesito, ma nella macro quale collegamento devo inserire?

devo mettere il collegamento alla cartella che contiene le varie cartelle contenti i pdf?

UTILIZZANDO LA MACRO CHE TROVO SOPRA, mi permette di selezionare la cartella contente i pdf, mi permette di andare a selezionare il file dove voglio copiare i pdf.

Nel mio caso vorrei sostituire nella posizione corretta i collegamenti già presenti nella colonna f del mio foglio Excel.
E' possibile modificare la macro in modo da riassocire questi collegamenti nella corretta psizione?

Eseguendo la macro legge dalla cartella i vari PDF e li incolla nel File nella posizione assegnata in un ordine casule, o seguendo una regola che non riesco a comprendere. Posso assegnare delle regole nella creazione dei collegamenti ipertestuali?

allego la macro che sto utilizzando



Sub Inserisci_NomeFiles_Iperlink()
Application.ScreenUpdating = False
Dim fd As FileDialog
Dim i As Integer
Dim miaCartella
Dim domanda As String
Dim lunghezza As Integer
Dim uR As Long
Dim FileAltro As Variant
Dim WK As Workbook
Dim sh As Worksheet
Dim fs As Object
Dim Fold As Object
Dim Nomefile As Object
Dim Cartella As Object
Dim colonna As String
Dim riga As Integer
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
Dim CartellaSelezionata As Variant
MsgBox "Scegli la cartella con i files ai quali attivare i collegamenti", vbInformation, "AVVISO"
With fd
If .Show = -1 Then
i = 1
For Each CartellaSelezionata In .SelectedItems
miaCartella = CartellaSelezionata
Next
Else
Exit Sub
End If
End With
MsgBox "Scegli il file excel su cui copiare i collegamenti", vbInformation, "AVVISO"
FileAltro = Application.GetOpenFilename
If FileAltro = "Falso" Then
MsgBox "Operazione annullata!", vbOKOnly + vbInformation
Exit Sub
End If
Set WK = Workbooks.Open(FileAltro)
Set sh = WK.Worksheets(1)
Set fs = CreateObject("Scripting.FileSystemObject")
Set Fold = fs.getfolder(miaCartella)
Set Cartella = Fold.Files
domanda = InputBox("Scegli la cella iniziale per scrivere i collegamenti. (Esempio B2)")
lunghezza = Len(domanda)
For i = 1 To lunghezza
If IsNumeric(Mid(domanda, i, 1)) = True Then
Exit For
End If
Next i
colonna = Left(domanda, i - 1)
riga = Val(Replace(domanda, colonna, ""))
On Error GoTo esci
For Each Nomefile In Cartella
While sh.Cells(riga, colonna).Value <> ""
riga = riga + 1
Wend
DoEvents
sh.Cells(riga, colonna) = Left(Nomefile.Name, InStr(Nomefile.Name, ".") - 1)
ActiveSheet.Hyperlinks.Add Anchor:=sh.Cells(riga, colonna), Address:=Nomefile
Next
uR = sh.Cells(Rows.Count, colonna).End(xlUp).Row
sh.Sort.SortFields.Clear
sh.Sort.SortFields.Add Key:=Range(domanda & ":" & colonna & uR), Order:=xlAscending
With sh.Sort
.SetRange Range(domanda & ":" & colonna & uR)
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
WK.Save
WK.Close
MsgBox "Fatto!", vbInformation, "NOTIFICA"
Set fs = Nothing
Set Cartella = Nothing
Set Fold = Nothing
Set fd = Nothing
Application.ScreenUpdating = True
Exit Sub
esci:
MsgBox "Si è verificato un errore, forse non hai digitato correttamente la cella scelta." & vbCrLf & "Ripeti l'operazione!", vbExclamation, "ATTENZIONE"
WK.Save
WK.Close
End Sub



vi ringrazio

[Modificato da MAURIZIO1989 21/05/2018 10:28]
Post: 3.488
Registrato il: 28/06/2011
Città: AGORDO
Età: 70
Utente Master
2013
OFFLINE
21/05/2018 10:45

Ciao a tutti
Secondo me il VBA del post1 è anomalo >>>olPath= "\\C:\users\AppData\Roaming\
Intanto inizia con (\\) Per quanto mi ricordi significa che è un percorso di rete.
Il (C:\users\) mi può stare bene se il files è su un PC di un Tuo collega
Però manca il nome-utente ed è molto strano che sia in (nome-utente\AppData\Roaming\)
Aggiungendo il codice sotto all'interno del vecchio file, Ti dirà esattamente dov'è posizionato il files.

Inoltre \\XenFS01\Gruppi\Qualità\01 SGQ\
Di sicuro sarà un percorso di rete. Mà esattamente qual'è la Directory che poi contiene tutte le Sotto_Directory con i PDF? Dovresti allegare il files vecchio, inoltre andare con il (cmd) Prompt dei Comandi in "quella Directory" ed inviare tale comando... dir /s >pdf.txt
Ti ritroverai un Txt che dovrai allegare pure lui, oppure copia/incolla nel files vecchio, in un nuovo foglio

Ps. Dato che hai una Directory con tante Sotto_Directory, credo dovrai rifare la lista da zero.
Forse si potrà pure fare un confronto per ogni files realmente presente, mà non sono sicuro.
vb
Sub indirizzo()
sPath = ThisWorkbook.Path
MsgBox sPath
End Sub
[Modificato da raffaele1953 21/05/2018 10:51]
Excel 2013
Vota: 15MediaObject5,0057 5
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 13:32. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com