Apertura File nome variabile

Anonimo
2015-08-14T12:43:07+00:00

Salve a tutti

sto cercando di aprire un file prendendo il nome da una cella del foglio di lavoro,

se nella cella A1 inserisco il nome del file che devo aprire che riferimenti devo mettere al posto di AB.xlsm ?

 Workbooks.Open Filename:="C:\AB*AB.xlsm*", UpdateLinks:=0

ho provato a modificare la formula parecchie volte ma non ho trovato quella corretta, con le vecchie macro 4.0 usavo la formula ' =FILE.APRI(FtFtA1) dove FtFtA1 era il nome assegnato alla cella.

Inoltre devo poi salvare il file con il nome che metto nella cella B1 con lo stesso sistema, la vecchia macro 4.0 era

=FILE.SALVA.CON.NOME(FtFtB1)

   Grazie

Roberto

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-08-14T19:51:41+00:00

Ciao Roberto,

la tua macro è molto complessa

La complessità della macro si spiega con la prima riga della mia risposta precedente:

Ho assunto che ci si riferisce a nomi che sono stati assegnati ai due celle, piuttosto che i contenuti di queste celle.

A questo proposito, nota anche il mio commento conclusivo:

Nota che, a seconda di come sono stati assegnati i due nomi, potrebbe essere possibile semplificare il codice.

Inoltre, la mia interpretazione delle tue esigenze è stata influenzata dal  tuo thread precedente che riguardava la creazione di nomi definiti.

l'ho studiata un pò, ne ho ricavato due macro una per aprire e una per salvare

La scelta di uno o due macro dipende interamente dalle tue esigenze specifiche: il mio obiettivo era quello di dimostrare l'apertura e il salvataggio dei file i cui nomi siano controllati da nomi definiti assegnati alle celle specificate. 

Tuttavia, se vuoi creare delle macro separate per questi due compiti, penso che si possa semplificare ulteriormente il codice, e renderlo più efficiente, dichiarando le variabili in commune a livello di modulo.

 e sono riuscito a semplificarla in questo modo:

Sub FileApri()

    Dim Nome As String

    Dim Dir As String

    Dim aa As Worksheet

    Set aa = Worksheets("AA")

    Dir = aa.Cells(1, 3).Value

    Nome = aa.Cells(1, 1).Value

    Workbooks.Open Filename:=Dir + Nome, UpdateLinks:=0

End Sub

Sub FileSalva()

    Dim Nome As String

    Dim Dir As String

    Dim aa As Worksheet

    Set aa = Worksheets("AA")

    Dir = aa.Cells(1, 3).Value

    Nome = aa.Cells(1, 2).Value

    ActiveWorkbook.SaveAs Filename:=Dir + Nome

End Sub

Funziona ma non so se è corretta l'impostazione di tutti i parametri o se ne servono altri,

io la uso per salvare i dati di lavoro giornalieri e ad ogni cambio del mese in automatico si salva con il nome del mese e anno (082015.xlsm, 092015.xlsm ecc. ecc.)

Il tuo obiettivo non è chiaro: come vuoi automatizzare il cambiamento di nomi al cambio di mese?  Forse stai utilizzando una formula che resituisci il mese corrente nelle celle di interesse? Altrimenti, sono le date indicate da aggiungere ai nomi inseriti in A1 e B1 per ottenere i nomi dei file richiesti? 

Leggendo il tuo codice, mi pare che tu usi la cella C1 per ricavare il percorso dei due file. A questo proposito vorrei sconsigliarti di usare Dir come il nome di una varibile in quanto sia una parola riservata di VBA; infatti si tratta di una funzione che restituisce il nome di un file, directory o una cartella che corrisponde a un determinato modello o attributo di file, o l'etichetta di volume di un disco.

Devo aggiungere ancora parecchie istruzioni per completarla, ma questo passo l'ho risolto.

Se hai qualche suggerimento su questo che ho fatto lo accetto volentieri.

Se il codice soddisfa tue esigenze, sarebbe probabilmente non necessario modificarlo, ma se fosse di interesse e vorresti fornire le precisazioni indicate, sarò felice di rivederlo.

===

Regards,

Norman

La risposta è stata utile?

0 commenti Nessun commento

3 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2015-08-15T13:06:07+00:00

    Ciao David,

    Anzitutto grazie per i consigli nella tua risposta, provvedero a metterli in atto.

    Per il resto, questa macro è una piccola parte di una piu complessa che sto traducendo dalle vecchie macro 4.0 in VBA, la macro ha il compito si stampare, salvare e archiviare le schede di lavoro che compiliamo giornalmente

    Questa è un faximile di scheda 

    Quando lancio la macro 4.0 esegue le seguenti operazioni:

    • verifica la correttezza degli orari,
    • archivia in un file SCH.xlsm tutte le schede in una sezione che corrisponde al giorno (lunedi, martedi, ecc)

    in modo che quando farò i programmi di lavoro i giorni successivi mi propone quelli corrispondenti allo stesso giorno della settimana precedente (sono sempre simili al 90% e risparmio molto tempo)

    • smista le schede a seconda che debbano essere stampate e archiviate, solo stampate, solo archiviate, per fare questo metto in una cella della scgeda una lettera S, N, A.
    • esegue la stampa,
    • a questo punto entra in funzione la tua macro che mi apre il file del mese e anno che prende dalla data sulle schede che devo archiviare, per farlo trasformo la data delle schede in MMAAAA che viene scritto nella cella A1 dalla quale apro il file se è presente, altrimenti mi crea un file nuovo (questo succede ogni mese).

    Il vecchio codice 4.0 è il seguente:

    Stampa Programmi SCHEDE MULTIPLE

    =SCHERMO()

    =DIRECTORY("C:\AB")

    ' COPIA LE ORE IN P0 PER SMISTARLE

    =CARTELLA.DI.LAVORO.SELEZIONA("P1")

    =SELEZIONA("R11C3:R167C10")

    =MODIFICA.COPIA()

    =CARTELLA.DI.LAVORO.SELEZIONA("P0")

    =SELEZIONA("R9C18")

    =MODIFICA.INCOLLA.SPECIALE(3;1;FALSO;FALSO)

    =CARTELLA.DI.LAVORO.SELEZIONA("P1")

    =SELEZIONA("R11C13:R167C20")

    =MODIFICA.COPIA()

    =CARTELLA.DI.LAVORO.SELEZIONA("P0")

    =SELEZIONA("R169C18")

    =MODIFICA.INCOLLA.SPECIALE(3;1;FALSO;FALSO)

    =COPIA.ANNULLA()

    ' CANC CELLE DOVE CI SONO FOTMULE CHE MI RESTITUISCONO VALORE 0

    =CARTELLA.DI.LAVORO.SELEZIONA("P0")

    =OPZIONI.VISUAL(;;;;;;;;;;;VERO;;;)

    =SELEZIONA("R9C18:R340C25")

    =ERRORE(FALSO)

    =SE(FORMULA.TROVA("0";2;1;2;1;VERO)=VERO)

    =SELEZIONA("RC")

    =MODIFICA.CANCELLA()

    =MACRO.ESEGUI(N28)

    =FINE.SE()

    =OPZIONI.VISUAL(;;;;;;;;;;;FALSO;;;)

    ' SALVA I PROGRAMMI CHE RIPROPONE GIORNALMENTE

    =DIRECTORY("D:\AB")

    =FILE.APRI("SCH.xlsm";1)

    =ATTIVA.FINESTRA("SCH.xlsm")

    =CARTELLA.DI.LAVORO.SELEZIONA("SCH")

    =SELEZIONA("R10")

    =ERRORE(FALSO)

    =SE(FORMULA.TROVA(PaP0U8)=VERO)

    ' ENTRA SE C'E' IL PROGRAMMA con la stessa data E LO AGGIORNO

    =SELEZIONA("RC")

    =SELEZIONA("R[-1]C")

    =ATTIVA.FINESTRA("PA.xlsm")

    =CARTELLA.DI.LAVORO.SELEZIONA("P0")

    =SELEZIONA("R7C21:R400C24")

    =MODIFICA.COPIA()

    =ATTIVA.FINESTRA("SCH.xlsm")

    =CARTELLA.DI.LAVORO.SELEZIONA("SCH")

    =SELEZIONA("RC")

    =MODIFICA.INCOLLA()

    =MACRO.ESEGUI(N71)

    =FINE.SE()

    ' ESCE SE NON C'E' IL PROGRAMMA con la stessa data E LO INSERISCO NUOVO

    =ATTIVA.FINESTRA("PA.xlsm")

    =CARTELLA.DI.LAVORO.SELEZIONA("P0")

    =SELEZIONA("R3C21:R400C25")

    =MODIFICA.COPIA()

    =ATTIVA.FINESTRA("SCH.xlsm")

    =CARTELLA.DI.LAVORO.SELEZIONA("SCH")

    =SELEZIONA("R5C6")

    =INSERISCI(1)

    =SELEZIONA("R3:R4;R27:R30;R47:R50;R67:R70;R87:R90;R107:R110;R127:R130;R147:R150;R167:R170;R187:R190;R207:R210;R227:R230;R247:R250;R267:R270;R287:R290;R307:R310;R327:R330;R347:R350;R367:R370")

    =MODIFICA.CANCELLA()

    =SELEZIONA("R1C1")

    =DIRECTORY("D:\AB")

    =FILE.SALVA()

    =FILE.CHIUDI()

    =DIRECTORY("C:\AB")

    ' SMISTAMENTO SCHEDE S - N - A - VUOTA

    =CARTELLA.DI.LAVORO.SELEZIONA("P0")

    contaSch=0

    =CARTELLA.DI.LAVORO.SELEZIONA("P0")

    =SE(contaSch > 16)

    ' CONTA IL NR DI SCHEDE NELLA FORMULA

    ' FINE CICLO CONTROLLO 16 SCHEDE

    ' CONTROLLA LA STAMPA

    =MACRO.ESEGUI(N160)

    =FINE.SE()

    ' CONTROLLA PRESENZA ORE

    =SELEZIONA("R10C25")

    =FORMULA.DEFINISCI.NOME("PaORE")

    =SE(PaORE ="")

    =CARTELLA.DI.LAVORO.SELEZIONA("P0")

    =SELEZIONA("R9C18:R28C25")

    =MODIFICA.ELIMINA(2)

    contaSch=contaSch+1

    =MACRO.ESEGUI(N86)

    =FINE.SE()

    ' CONTROLLA PRESENZA NOME DIPENDENTE

    =SELEZIONA("R9C21")

    =FORMULA.DEFINISCI.NOME("PaDIP")

    =SE(PaDIP ="")

    =CARTELLA.DI.LAVORO.SELEZIONA("P0")

    =SELEZIONA("R9C18:R28C25")

    =MODIFICA.ELIMINA(2)

    contaSch=contaSch+1

    =MACRO.ESEGUI(N86)

    =FINE.SE()

    ' CONTROLLA S - S - VUOTO

    =SELEZIONA("R9C25")

    =FORMULA.DEFINISCI.NOME("PaSNA")

    =SE(PaSNA ="A")

    ' ELIMINA PERCHE' NON STAMPA NON ARCHIVIA

    =CARTELLA.DI.LAVORO.SELEZIONA("P0")

    =SELEZIONA("R9C18:R28C25")

    =MODIFICA.ELIMINA(2)

    contaSch=contaSch+1

    =MACRO.ESEGUI(N86)

    =FINE.SE()

    =SE(PaSNA ="")

    ' STAMPA E ARCHIVIA

    =CARTELLA.DI.LAVORO.SELEZIONA("P0")

    =SELEZIONA("R11C18:R24C24")

    =MODIFICA.COPIA()

    =SELEZIONA("R11C37")

    =INSERISCI(2)

    =MODIFICA.COPIA()

    =SELEZIONA("R11C27")

    =INSERISCI(2)

    =CARTELLA.DI.LAVORO.SELEZIONA("P0")

    =SELEZIONA("R9C18:R28C25")

    =MODIFICA.ELIMINA(2)

    contaSch=contaSch+1

    =MACRO.ESEGUI(N86)

    =FINE.SE()

    =SE(PaSNA ="S")

    ' STAMPA E NON ARCHIVIA

    =CARTELLA.DI.LAVORO.SELEZIONA("P0")

    =SELEZIONA("R9C25")

    =SELEZIONA("R[2]C[-7]:R[15]C[-1]")

    =MODIFICA.COPIA()

    =SELEZIONA("R11C37")

    =INSERISCI(2)

    =CARTELLA.DI.LAVORO.SELEZIONA("P0")

    =SELEZIONA("R9C18:R28C25")

    =MODIFICA.ELIMINA(2)

    contaSch=contaSch+1

    =MACRO.ESEGUI(N86)

    =FINE.SE()

    =FILE.IMPOSTA.STAMPANTE?()

    ' PREPARAZIONE ALLA STAMPA

    =CARTELLA.DI.LAVORO.SELEZIONA("P0")

    =SELEZIONA("R11C38")

    =FORMULA.DEFINISCI.NOME("PaDIP")

    =SE(PaDIP ="")

    ' FINE CICLO STAMPE

    =MACRO.ESEGUI(N231)

    =FINE.SE()

    =CARTELLA.DI.LAVORO.SELEZIONA("P0")

    =SELEZIONA("R11C38")

    =SELEZIONA("RC[-1]:R[13]C[5]")

    =FORMULA.DEFINISCI.NOME("PaDIP")

    =MODIFICA.COPIA()

    =SELEZIONA("R13C3")

    ' COPIA SCHEDA NR 1

    =MODIFICA.INCOLLA.SPECIALE(3;1;FALSO;FALSO)

    =SELEZIONA("PaDIP")

    =MODIFICA.ELIMINA(2)

    =CARTELLA.DI.LAVORO.SELEZIONA("P0")

    =SELEZIONA("R11C37:R24C43")

    =FORMULA.DEFINISCI.NOME("PaDIP")

    =MODIFICA.COPIA()

    =SELEZIONA("R33C3")

    ' COPIA SCHEDA NR 2

    =MODIFICA.INCOLLA.SPECIALE(3;1;FALSO;FALSO)

    =SELEZIONA("PaDIP")

    =MODIFICA.ELIMINA(2)

    ' BORDARE CLIENTI AREA DI STAMPA

    =CARTELLA.DI.LAVORO.SELEZIONA("P0")

    bordo=0

    =SELEZIONA("R13C8")

    =FORMULA.DEFINISCI.NOME("bordoP0")

    =SE(bordo = 34)

    =MACRO.ESEGUI(N218)

    =FINE.SE()

    =SE(bordoP0 = "")

    =FORMULA.VAI.A("bordoP0")

    =SELEZIONA("RC[-2]:RC[2]")

    =FORMATO.BORDO(0;0;0;0;0;;;1;1;1;1)

    =SELEZIONA("R[1]C[2]")

    =FORMULA.DEFINISCI.NOME("bordoP0")

    bordo=bordo+1

    =MACRO.ESEGUI(N195)

    =FINE.SE()

    =FORMULA.VAI.A("bordoP0")

    =SELEZIONA("RC[-2]:RC[2]")

    =FORMATO.BORDO(0;7;7;7;7;;;1;1;1;1)

    =SELEZIONA("R[1]C[2]")

    =FORMULA.DEFINISCI.NOME("bordoP0")

    bordo=bordo+1

    =MACRO.ESEGUI(N195)

    =FILE.STAMPA(1;;;1;FALSO;FALSO;1;;;300)

    =MACRO.SOSPENDI(ADESSO()+"00.00.05")

    ' PULISCO AREA STAMPA

    =CARTELLA.DI.LAVORO.SELEZIONA("P0")

    =SELEZIONA("R13C3:R26C9;R33C3:R46C9")

    =MODIFICA.CANCELLA()

    =MACRO.ESEGUI(N162)

    ' ENTRA A FINE CICLO STAMPE E INIZIA ARCHIVIAZIONE

    =CARTELLA.DI.LAVORO.SELEZIONA("P0")

    =SELEZIONA("R11C28")

    =FORMULA.DEFINISCI.NOME("PaDIP")

    =SE(PaDIP ="")

    ' NON CI SONO SCHEDE DA ARCHIVIARE

    =MACRO.ESEGUI(N344)

    =FINE.SE()

    =FORMULA.SELEZ.FORMATO.SPEC(5)

    =SCH.ORDINA(1;"R11C32";1;;;;;0;1;FALSO)

    =SELEZIONA("R11C32")

    =SELEZIONA.FINE(4)

    =SELEZIONA("RC[2]")

    =FORMULA.DEFINISCI.NOME("PaDIP")

    ' COPIA IL FORMATO DATA NELLE SCHEDE DA ARCHIVIARE

    =SELEZIONA("RC[-5]")

    =FORMULA.DEFINISCI.NOME("PaP0T")

    =CARTELLA.DI.LAVORO.SELEZIONA("P0")

    ' SERVE PER APRIRE LA SCHEDA MENSILE DELL'ARCHIVIO

    =SELEZIONA("R3C7")

    =MODIFICA.COPIA()

    =SELEZIONA("PaP0G2")

    =MODIFICA.INCOLLA.SPECIALE(3;1;FALSO;FALSO)

    =CARTELLA.DI.LAVORO.SELEZIONA("P0")

    =SELEZIONA("R3C29")

    =MODIFICA.COPIA()

    =SELEZIONA("R11C29:PaP0T")

    =MODIFICA.INCOLLA.SPECIALE(4;1;FALSO;FALSO)

    =COPIA.ANNULLA()

    =DIRECTORY("D:\AB\SCHEDE")

    =ERRORE(FALSO)

    =SE(FILE.APRI(PaP0G2)=FALSO)

    =FILE.APRI("2000.xlsm";1)

    =FILE.SALVA.CON.NOME(PaP0G2)

    =FINE.SE()

    =ATTIVA.FINESTRA("PA.xlsm")

    =CARTELLA.DI.LAVORO.SELEZIONA("P0")

    ' COPIARE FORMULA TOT ORE ARCHIVIO SCHEDE

    =SELEZIONA("R11C27")

    =SELEZIONA("RC[7]")

    =FORMULA.DEFINISCI.NOME("PaDIP1")

    =SELEZIONA("R3C34")

    =MODIFICA.COPIA()

    =SELEZIONA("PaDIP1:PaDIP")

    =MODIFICA.INCOLLA.SPECIALE(2;1;FALSO;FALSO)

    =MODIFICA.COPIA()

    =MODIFICA.INCOLLA.SPECIALE(3;1;FALSO;FALSO)

    ' COPIA FORMATI ARCHIVIO SCHEDE

    =SELEZIONA("R3C27:R3C32")

    =MODIFICA.COPIA()

    =SELEZIONA("R11C27:PaDIP")

    =MODIFICA.INCOLLA.SPECIALE(4;1;FALSO;FALSO)

    ' COPIA SCHEDE ARCHIVIO SCHEDE

    =SELEZIONA("R11C27:PaDIP")

    =MODIFICA.COPIA()

    =ATTIVA.FINESTRA.SUCCESS()

    =SELEZIONA("R1C1")

    =INSERISCI(2)

    =COPIA.ANNULLA()

    =FORMATO.BORDO(0;0;0;0;0;;;1;1;1;1)

    ' ORDINO PER DATA E DIPENDENTE

    =SELEZIONA("R1C1")

    =FORMULA.SELEZ.FORMATO.SPEC(5)

    =SCH.ORDINA(1;"R1C3";2;"R1C2";1;;1;0;1;FALSO)

    =SELEZIONA("R1C1")

    =DIRECTORY("D:\AB\SCHEDE")

    ' SALVA I PROGRAMMI NELLA DIRECTORY    \SCHEDE\

    =FILE.SALVA()

    =FILE.CHIUDI()

    =DIRECTORY("C:\AB")

    ' PULISCO P1

    ' INIZIO ZONA AUMENTO NR SCHEDE DIP

    =ATTIVA.FINESTRA("PA.xlsm")

    =CARTELLA.DI.LAVORO.SELEZIONA("P1")

    ' DA 1 A 4 DIP

    =SELEZIONA("R11C6;R11C10;R13C6:R26C9;R11C16;R11C20;R13C16:R26C19;R31C6;R31C10;R33C6:R46C9;R31C16;R31C20;R33C16:R46C19")

    =MODIFICA.CANCELLA()

    ' DA 5 A 8 DIP

    =SELEZIONA("R51C6;R51C10;R53C6:R66C9;R51C16;R51C20;R53C16:R66C19;R71C6;R71C10;R73C6:R86C9;R71C16;R71C20;R73C16:R86C19")

    =MODIFICA.CANCELLA()

    ' DA 9 A 12 DIP

    =SELEZIONA("R91C6;R91C10;R93C6:R106C9;R91C16;R91C20;R93C16:R106C19;R111C6;R111C10;R113C6:R126C9;R111C16;R111C20;R113C16:R126C19")

    =MODIFICA.CANCELLA()

    ' INIZIO BLOCCO DI UNA SCHEDA

    ' DA 13 A 16 DIP

    =SELEZIONA("R131C6;R131C10;R133C6:R146C9;R131C16;R131C20;R133C16:R146C19;R151C6;R151C10;R153C6:R166C9;R151C16;R151C20;R153C16:R166C19")

    =MODIFICA.CANCELLA()

    =SELEZIONA("R13C6")

    ' FINE BLOCCO DI UNA SCHEDA

    ' FINE ZONA AUMENTO NR SCHEDE DIP

    =CARTELLA.DI.LAVORO.SELEZIONA("P0")

    =SELEZIONA("R9C18:R370C34")

    =MODIFICA.CANCELLA()

    =SELEZIONA("R1C1")

    =CARTELLA.DI.LAVORO.SELEZIONA("AA")

    =SCHERMO()

    =AVVISO(" FINE STAMPA PROGRAMMI ";3)

    =FERMA()

    =CARTELLA.DI.LAVORO.SELEZIONA("AA")

    =SCHERMO()

    =AVVISO(" NON CI SONO PROGRAMMI DA STAMPARE ";3)

    =FERMA()

    Questo sotto è il riepilogo dell'archivio e ogni mese raggiunge circa 2'000 righe

    Come vedi ho tantissimo lavoro da fare, sicuramente per qualche passaggio complesso avro ancora bisogno di aiuto.

    Grazie

    Roberto

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2015-08-14T18:06:20+00:00

    Ciao David,

    la tua macro è molto complessa, l'ho studiata un pò, ne ho ricavato due macro una per aprire e una per salvare e sono riuscito a semplificarla in questo modo:

    Sub FileApri()

        Dim Nome As String

        Dim Dir As String

        Dim aa As Worksheet

        Set aa = Worksheets("AA")

        Dir = aa.Cells(1, 3).Value

        Nome = aa.Cells(1, 1).Value

        Workbooks.Open Filename:=Dir + Nome, UpdateLinks:=0

    End Sub

    Sub FileSalva()

        Dim Nome As String

        Dim Dir As String

        Dim aa As Worksheet

        Set aa = Worksheets("AA")

        Dir = aa.Cells(1, 3).Value

        Nome = aa.Cells(1, 2).Value

        ActiveWorkbook.SaveAs Filename:=Dir + Nome

    End Sub

    Funziona ma non so se è corretta l'impostazione di tutti i parametri o se ne servono altri,

    io la uso per salvare i dati di lavoro giornalieri e ad ogni cambio del mese in automatico si salva con il nome del mese e anno (082015.xlsm, 092015.xlsm ecc. ecc.)

    Devo aggiungere ancora parecchie istruzioni per completarla, ma questo passo l'ho risolto.

    Se hai qualche suggerimento su questo che ho fatto lo accetto volentieri.

    Grazie

    Roberto

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2015-08-14T15:53:52+00:00

    Ciao Roberto,

    Ho assunto che ci si riferisce a nomi che sono stati assegnati ai due celle, piuttosto che i contenuti di queste celle.

    Se è stato assegnato il nome del file da aprire come il nome della cella A1 e il nome con il quale quest'ultimo file deve essere salvato come il nome della cella B1 sul foglio di interesse, prova qualcosa del genere:

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

    Option Explicit

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

    Public Sub Tester()

        Dim WB As Workbook, WB2 As Workbook

        Dim SH As Worksheet

        Dim Rng As Range, Rng2 As Range

        Dim RngAprire As Range, RngSalvare As Range

        Dim Nme As Name

        Dim aStr As String, sStr As String, sPath As String

        Const sFoglio As String = "Foglio1"                            '<<=== Modifica

        Const sPercorso As String = "C:\AB"                         '<<=== Modifica

        Const sPrimaCella As String = "A1"                             '<<=== Modifica

        Const sSecondaCella As String = "B1"                   '<<=== Modifica

        Set WB = ThisWorkbook

        Set SH = WB.Sheets(sFoglio)

        With SH

            Set RngAprire = .Range(sPrimaCella)

            Set RngSalvare = .Range(sSecondaCella)

        End With

        aStr = Application.PathSeparator

        If Right(sPercorso, 1) = sStr Then

            sPath = sPercorso

        Else

            sPath = sPercorso & aStr

        End If

        For Each Nme In WB.Names

            On Error Resume Next

            Set Rng = Nme.RefersToRange

            On Error GoTo 0

            If Not Rng Is Nothing Then

                sStr = Rng.Address

            Else

                sStr = Evaluate(Nme.RefersTo)

            End If

            If sStr = RngAprire.Address Then    '_

                Set WB2 = Workbooks.Open(sPath _

                                       & Nme.Name)

                Exit For

            End If

        Next Nme

        For Each Nme In WB.Names

            On Error Resume Next

            Set Rng2 = Nme.RefersToRange

            On Error GoTo 0

            If Not Rng2 Is Nothing Then

                sStr = Rng2.Address

            Else

                sStr = Evaluate(Nme.RefersTo)

            End If

            If sStr = RngSalvare.Address Then

                WB2.SaveAs Filename:=sPath _

                                   & Nme.Name

                Exit For

            End If

        Next Nme

    End Sub

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

    Nota che, a seconda di come sono stati assegnati i due nomi, potrebbe essere possibile semplificare il codice.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento