Condividi tramite

Cambio sorgente file di dati

Anonimo
2014-07-15T18:45:37+00:00

Salve a tutti,

per motivi di dimensione file e per mantenere separate alcune formule e tabelle dati, mi ritrovo con 2 file "template" che utilizzo per sviluppare 2 fasi differenti del lavoro ... come al solito provo a fare un esempio semplificato sperando di riuscire a spiegarmi decentemente.

Esempio:

file Compilami.xlsx raccoglie i dati in colonna A,B,C e calcola i risultati mostrati in colonna D,E,F,G (solitamente si impiegano "X" righe di dati - circa 100)

A1="Posizione 001" ; B1=Nome="Paolo" ; C1=Età="14" ; D=Calcola anno di nascita="Sei nato/a nel 2000" ; ....

A2="Posizione 002" ; B2=Nome="Roberto" ; C2=Età="15" ; D=Calcola anno di nascita="Sei nato/a nel 1999" ; ....

A3="Posizione 003" ; B3=Nome="Fabiana" ; C3=Età="18" ; D=Calcola anno di nascita="Sei nato/a nel 1996" ; ....

...

file Grafico.xlsx utilizza i dati raccolti e calcolati in "Compilami.xlsx" e li dispone in "X" fogli separati

Grafico.xlsx/foglio="Paolo"/A1="Questo è il foglio di "&[Compilami.xlsx]foglio1!$B$1

Grafico.xlsx/foglio="Paolo"/A4=[Compilami.xlsx]foglio1!$B$1&" è nato nel "&[Compilami.xlsx]foglio1!$D$1

...

Grafico.xlsx/foglio="Roberto"/A1="Questo è il foglio di "&[Compilami.xlsx]foglio1!$B$2

Grafico.xlsx/foglio="Roberto"/A4=[Compilami.xlsx]foglio1!$B$2&" è nato nel "&[Compilami.xlsx]foglio1!$D$2

...

Se impostassi i file in questo modo e li aprissi assieme e li salvassi con nome assieme non avrei problemi, invece il mio problema è che

uso il file Compilami.xlsx più volte al giorno e una volta compilato lo salvo con nome aggiungendo davanti un numero di riconoscimento o il riferimento del cliente (es. 540-14-Compilami.xlsx o Rossi-Compilami.xlsx) e solo alcune volte e sempre dopo giorni di distanza, ho l'esigenza di CONNETTERE l'altro file Grafico.xlsx (che diventerà poi 540-14-Grafico.xlsx) a 540-14-Compilami.xlsx in modo che prenda i dati da 540-14-Grafico.xlsx e non più da Grafico.xlsx.

Sapreste dirmi se c'è un sistema per ottenere questo?

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

  1. Anonimo
    2014-07-30T06:45:32+00:00

    ... proprio nessuna soluzione?

    Tutti i collegamenti sarebbero da rifare a mano?

    Ciao Reggio,

    Credo proprio di no!

    Visto che stai utilizzando Excel2007, il quale non offre l'evento Workbook_AfterSave, prova

    qualcosa del genere:

    Alt-F11 per aprire l'editor di VBA

    Alt-IM per inserire un nuovo modulo di codice

    Nel nuovo modulo vuoto, incolla il seguente codice:

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

    Option Explicit

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

    Public Sub myAftersave(sNewName As String, _

                           sName As String, _

                           sCurrName As String, _

                           sShortname)

        Dim WB As Workbook

        Dim SH As Worksheet

        Dim Rng As Range

        Dim rCell As Range

        Dim sFilename As String

        On Error GoTo XIT

        With Application

            .ScreenUpdating = False

            .DisplayAlerts = False

        End With

        Set WB = Workbooks.Open(sName)

        If Not WB Is Nothing Then

            With WB

                For Each SH In .Worksheets

                    SH.UsedRange.Replace What:=sCurrName, _

                                         Replacement:=sShortname

                Next SH

                .SaveAs Filename:=sNewName, _

                        FileFormat:=WB.FileFormat

                .Close Savechanges:=False

            End With

        End If

    XIT:

        With Application

            .ScreenUpdating = True

            .DisplayAlerts = True

        End With

    End Sub

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

    Ctrl-R per entrare nella finestra del Project Explorer

    Fai doppio clic su ThisWorkbook e incolla il seguente codice di evento:

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

    Option Explicit

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

    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

        Dim Res As Variant

        Dim sShortname As String

        Dim sNewName As String, sNewName2 As String

        Dim sOldName As String, sOldName2 As String

        Dim sStr As String

        Dim destWB As Workbook

        Const aStr As String = "Compilami"      '\ Nome originale (senza estensione)

        Const bStr As String = "Grafico"            '\ Nome originale (senza estensione)

        sShortname = Me.Name

        sOldName = Me.FullName

        sOldName2 = Replace(sOldName, aStr, bStr)

        On Error GoTo XIT

        Application.EnableEvents = False

        If SaveAsUI = True Then

            Cancel = True

            Res = Application.GetSaveAsFilename(Me.Name, filefilter:= _

            "Excel 97-2003 (*.xls),*.xls,Excel 2007 Macro (*.xlsm)," & _

                "*.xlsm,Excel 2007 No Macro (*.xlsx),*.xlsx")

            If Res <> False Then

                sNewName = Res

                Me.SaveAs Filename:=Res

                sNewName2 = Replace(Res, aStr, bStr)

                sNewName2 = Replace(sNewName2, "xls", "xlsx")  

            End If

        Else

            Me.Save

        End If

        If Me.Name <> sShortname Then

            Call myAftersave(sNewName2, sOldName2, sShortname, Me.Name)

        End If

    XIT:

        Application.EnableEvents = True

    End Sub

    '<<========

    Alt-Q per chiudere l'editor di VBA e tornare a Excel.

    Salva il file con un estensione xlsm.

    Ora, ogni volta che il file Compilami,xlsm viene salvato con un nome diverso, il corrispondente file Grafico.xlsx verrà aperto automaticamente in modo nascosto; tutti i link verranno rinominati in accordo con il nuovo nome per il file Compilami.  Infine, il file Grafico verrà salvato e chiuso con i collegamenti aggiornati.

    L'unica operazione manuale è di accettare l'aggiornamento dei collegamenti e posso rimuovere quel singolo clic, se vuoi.

    A proposito, l'evento Workbook_AfterSave è venuto con Excel 2010.

    Postscriptum: nella procedura  Workbook_BeforeSave, ho sostituito ActiveWorkbook con Me

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento

1 risposta aggiuntiva

Ordina per: Più utili
  1. Anonimo
    2014-07-29T14:18:22+00:00

    ... proprio nessuna soluzione?

    Tutti i collegamenti sarebbero da rifare a mano?

    La risposta è stata utile?

    0 commenti Nessun commento