Riferimento ad un file in rete mantenendo fisso il percorso

Anonimo
2017-10-30T14:46:37+00:00

Buongiorno a tutti. Ho bisogno di aiuto con un problema relativo ad Excel.

Cercherò di essere il più chiaro possibile perché, almeno per me, la questione è un po' complessa.

Ho bisogno di inserire in un foglio di un Excel (contenente macro e quant'altro) dei dati. Questi dati, però, risiedono in un foglio di un altro file Excel in rete. I due file li chiamerò "PRINCIPALE" (quello che fa i conti) e "DATI".

Ho già usato la funzione "incolla collegamento" ma non risolve del tutto il mio problema.

L'architettura della rete prevede un disco principale (S:) e tanti altri dischi che non sono altro che partizioni di S:.

Il mio problema sta nel fatto che, usando la funzione "incolla collegamento", se apro il file PRINCIPALE dal disco S: mi vede i collegamenti al percorso corretto quindi per esempio, se seleziono la cella C7 appare questo ='S:\xxx\xxx[DATI.xlsx]nome_foglio'!C7

Però se apro il file da uno degli altri dischi, quel percorso cambia e mi appare, per esempio, H: se lo vado ad aprire dal disco H.

Naturalmente perde il percorso del file DATI e non mi aggiorna i campi che ho collegato.

C'è un modo per bloccare quel percorso?

Aggiungo che ho trovato un modo per, diciamo, bloccare il percorso ma non riesco a farlo di nuovo perché non ho idea di come io abbia fatto.

Ho involontariamente creato una matrice e quella stessa cella mi appare con questo percorso:

In questo modo sembra che, qualunque sia il disco da cui apro il file, anche C, punta sempre al file DATI correttamente e mi aggiorna le celle collegate.

Ho bisogno di capire come ho fatto per poterlo ripetere su ogni foglio per cui mi servono collegamenti a file Excel nella nostra rete e che per necessità devono rimanere dove sono per poter essere aggiornati centralmente. E non ho idea di cosa sia quel Excel.sheet.12 dato che non ho 12 fogli in nessuno dei file excel di cui sto parlando.

Quindi le mie domande sono:

  • conviene creare le matrici o c'è un modo più semplice per mantenere fisso il collegamento attraverso il percorso del disco S?
  • come ho fatto a creare quella matrice?

Spero di essermi spiegato sufficientemente bene.

Ringrazio in anticipo chiunque abbia voglia di aiutarmi,

Ciao

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

5 risposte

Ordina per: Più utili
  1. Anonimo
    2017-11-02T19:26:05+00:00

    Ciao Andrea,

    ti ringrazio ancora per il supporto!

    Prego!

    Mentre stavo inserendo il secondo codice che mi hai scritto mi sono accorto che il file stava cercando di aggiornare i link da un percorso che non esisteva più ed è per quel motivo che non mi dava il percorso corretto!

    Scusa se ti ho fatto perdere tempo con il programma ma comunque mi ha aiutato a far funzionare il tutto. Almeno così sembra!

    Farò qualche prova in questi giorni e ti tengo aggiornato nel caso debba percorrere la strada di VBA ;)

    Grazie mille

    Mi fa piacere che pare che tu abbia risolto il problema e ti ringrazio per il cortese riscontro.

    Credo che la soluzione proposta da me dovrebbe sempre funzionare - a meno che non si abilita le macro! - anche se sembra che assomigli la brutta forza :-)

    Ad ogni modo, facci sapere  i tuoi risultati.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2017-11-02T15:58:09+00:00

    Ciao Norman,

    ti ringrazio ancora per il supporto!

    Mentre stavo inserendo il secondo codice che mi hai scritto mi sono accorto che il file stava cercando di aggiornare i link da un percorso che non esisteva più ed è per quel motivo che non mi dava il percorso corretto!

    Scusa se ti ho fatto perdere tempo con il programma ma comunque mi ha aiutato a far funzionare il tutto. Almeno così sembra!

    Farò qualche prova in questi giorni e ti tengo aggiornato nel caso debba percorrere la strada di VBA ;)

    Grazie mille

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2017-11-02T11:07:50+00:00

    Ciao Andrea,

    Ho creato un file Principale.xlsm ed un file Dati.xlsx nella directory C:\Users\NDJ\Documents. Nelle celle C7:D10 del primo foglio del file Principale.xlsm ho creato dei collegamenti al file Dati.xlsx:

    Ho poi copiato il file in una cartella Archivio su un Drive X:

    Aprendo il file sul drive X, senza abilitare le macro, vedo:

    Cioè, i collegamnenti sono ora ad un file X:\Archivio\Dati.xlsx, il quale non esiste - insomma il problema sollevato da te!

    Comunque, chiudendo  il file Principale.xlsm e riaprendolo con le macro abiiltate vedo invece:

    Eureka !!!

    Quindi, per approfondire il tuo problema, ti chiederei, temporeaneomente di sostituire il codice nel oggetto ThisWorkbook con la seguente versione diagnostica:

    '=========>>

    Option Explicit

    '--------->>

    Private Sub Workbook_Open()

        Dim vOld As Variant

        Dim vNew As Variant

        vOld = ThisWorkbook.LinkSources(xlExcelLinks)(1)

         Call AggiornaLink

        vNew = ThisWorkbook.LinkSources(xlExcelLinks)(1)

        Debug.Print "vOld = sPercorsoCorretto "

        Debug.Print vOld = sPercorsoCorretto

        Debug.Print vbNewLine & "vNew =  sPercorsoCorretto"

        Debug.Print vNew = sPercorsoCorretto

        Debug.Print vbNewLine & "vOld = vNew"

        Debug.Print vOld = vNew

    End Sub

    '<<=========

    Sostituisci anche il codice nel Modulo2 con la seguente versione:

    '=========>>

    Option Explicit

     Public Const sPercorsoCorretto As String = _

              "C:\Users\ndj\Documents\Dati.xlsx"                    '<<=== Modifica

    '--------->>

    Public Sub AggiornaLink()

        Dim WB As Workbook

        Dim vLinks As Variant, vLink As Variant

        Dim sStr As String

    '    Const sPercorsoCorretto As String = _

              "C:\Users\ndj\Documents\Dati.xlsx"                       '<<=== Modifica

        Set WB = ThisWorkbook

        With WB

            vLinks = .LinkSources(xlExcelLinks)

            If Not IsEmpty(vLinks) Then

                .ChangeLink Name:=vLinks(1), _

                            NewName:=sPercorsoCorretto, _

                            Type:=xlExcelLinks

            End If

        End With

    End Sub

    '<<=========

    Ora, dopo aver riprovato il procedimento:

    Ctrl+G per accedere alla finestra Immediate e fammi sapere i tre messaggi che vedrai

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2017-11-02T08:25:45+00:00

    Ciao Norman, intanto grazie mille!

    Allora io ho copiato le due parti di programma che mi hai scritto. Ti incollo due screen:

    Questa_cartella_di_lavoro

    Modulo2 (perché mi era comodo avendo meno macro scritte in questo modulo

    Però ho altre domande perché ancora non mi aggiorna i dati. Dove sbaglio?

    Io devo prendere i dati da copiare dal file DATI (foglio 2 per esempio) e linkarli nel foglio 7 del file PRONCIPALE.

    Ti ringrazio molto, se ti servono più info perché non mi sono spiegato abbastanza fammi sapere.

    Ciao

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2017-11-01T01:10:32+00:00

    Ciao Andrea,

    Ho bisogno di aiuto con un problema relativo ad Excel.

    Cercherò di essere il più chiaro possibile perché, almeno per me, la questione è un po' complessa.

    Ho bisogno di inserire in un foglio di un Excel (contenente macro e quant'altro) dei dati. Questi dati, però, risiedono in un foglio di un altro file Excel in rete. I due file li chiamerò "PRINCIPALE" (quello che fa i conti) e "DATI".

    Ho già usato la funzione "incolla collegamento" ma non risolve del tutto il mio problema.

    L'architettura della rete prevede un disco principale (S:) e tanti altri dischi che non sono altro che partizioni di S:.

    Il mio problema sta nel fatto che, usando la funzione "incolla collegamento", se apro il file PRINCIPALE dal disco S: mi vede i collegamenti al percorso corretto quindi per esempio, se seleziono la cella C7 appare questo ='S:\xxx\xxx[DATI.xlsx]nome_foglio'!C7

    Però se apro il file da uno degli altri dischi, quel percorso cambia e mi appare, per esempio, H: se lo vado ad aprire dal disco H.

    Naturalmente perde il percorso del file DATI e non mi aggiorna i campi che ho collegato.

    C'è un modo per bloccare quel percorso?

    Aggiungo che ho trovato un modo per, diciamo, bloccare il percorso ma non riesco a farlo di nuovo perché non ho idea di come io abbia fatto.

    Ho involontariamente creato una matrice e quella stessa cella mi appare con questo percorso:

    In questo modo sembra che, qualunque sia il disco da cui apro il file, anche C, punta sempre al file DATI correttamente e mi aggiorna le celle collegate.

    Ho bisogno di capire come ho fatto per poterlo ripetere su ogni foglio per cui mi servono collegamenti a file Excel nella nostra rete e che per necessità devono rimanere dove sono per poter essere aggiornati centralmente. E non ho idea di cosa sia quel Excel.sheet.12 dato che non ho 12 fogli in nessuno dei file excel di cui sto parlando.

    Quindi le mie domande sono:

    • conviene creare le matrici o c'è un modo più semplice per mantenere fisso il collegamento attraverso il percorso del disco S?
    • come ho fatto a creare quella matrice?

    Visto che il file problematico ha una estensione xlsm, vorrei suggerire di fare ricorso a VBA.

    Quindi, in un modulo standrd, incilla il seguente codice:

    '=========>>

    Option Explicit

    '--------->>

    Public Sub AggiornaLink()

        Dim WB As Workbook

        Dim vLinks As Variant, vLink As Variant

        Dim sStr As String

        Const sPercorsoCorretto As String = _

                  "C:\Users\ndj\Documents\Dati.xlsx"      '<<=== Modifica

        Set WB = ThisWorkbook

        With WB

            vLinks = .LinkSources(xlExcelLinks)

            If Not IsEmpty(vLinks) Then

                .ChangeLink Name:=vLinks(1), _

                            NewName:=sPercorsoCorretto, _

                            Type:=xlExcelLinks

            End If

        End With

    End Sub

    '<<=========

    Nel oggetto ThisWorkbook (Questa_cartella_di_lavoro), incolla:

    '=========>>

    Option Explicit

    '--------->>

    Private Sub Workbook_Open()

        Call AggiornaLink

    End Sub

    '<<=========

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento