Riferimento file



  • Riferimento file
    di pf92 (utente non iscritto) data: 17/06/2014 15:43:34

    Salve a tutti, scusate di nuovo il disturbo.

    Per completare il mio file avrei bisogno di un codice che mi cambi, in tutto il file, i riferimenti ad un altro file in background in base a quello che scelgo all'inizio.

    Mi spiego meglio:
    Come si vede dal codice sono riuscito ad implementare, all'evento "Workbooks open", un codice che mi controlla se esiste o meno il database (un altro file in background, appunto); se il file DATAtest.xls esiste lo apre, altrimenti da la possibilità all'utente di sceglierlo.

    Tutto va alla perfezione tranne che, ovviamente, i riferimenti al file all'interno del foglio, in quanto essendo statici (perchè ripetuti ogni volta manualmente), non cambiano in base al file "database" scelto all'apertura.

    Chiedo l'impossibile?

    Grazie
     
    Private Sub Workbook_Open()
    If Not Application.Version >= "14.0" Then
       MsgBox ("Installare Excel 2010 o successivo!")
       ThisWorkbook.Close SaveChanges:=False
       Application.DisplayAlerts = False
       Exit Sub
    End If
    
    Dim book As New Excel.Workbook
    Application.ScreenUpdating = False
    Application.ThisWorkbook.UpdateLinks = xlUpdateLinksNever
    Application.ThisWorkbook.UpdateRemoteReferences = False
    
    On Error Resume Next
    Application.DisplayAlerts = False
    If Dir$("H:PREVENTIVI2013MODELLO PREVENTIVODATAtest.xls") <> "" Then
        Set book = Workbooks.Open("H:PREVENTIVI2013MODELLO PREVENTIVODATAtest.xls", UpdateLinks:=False, ReadOnly:=False)
        Application.DisplayAlerts = True
        MsgBox ("ATTENZIONE!! Le versioni precedenti alla 8.12 presentano un ERRORE DI CALCOLO della posa!")
    Else
        MsgBox "Impossibile aprire il database."
        Dim intChoice As Integer
        Dim strPath As String
        Application.FileDialog(msoFileDialogOpen).AllowMultiSelect = False
        Call Application.FileDialog(msoFileDialogOpen).Filters.Clear
        Call Application.FileDialog(msoFileDialogOpen).Filters.Add("File di Excel", "*.xls")
        
        'Call Application.FileDialog(msoFileDialogOpen).Filters.Add("Text Files Only", "*.txt")
        'make the file dialog visible to the user
        intChoice = Application.FileDialog(msoFileDialogOpen).Show
        'determine what choice the user made
        If intChoice <> 0 Then
            'get the file path selected by the user
            strPath = Application.FileDialog(msoFileDialogOpen).SelectedItems(1)
        End If
        Set book = Workbooks.Open(strPath, UpdateLinks:=False, ReadOnly:=False)
        If book <> False Then
            If Err = 0 Then
                If Right(spath, 1) <> "" Then
                spath = spath & ""
                End If
            End If
        End If
    End If
    End Sub



  • di Lucas87 data: 17/06/2014 16:29:30

    Ciao
    Quello che devi fare è sostituire i riferimenti al foglio con una variabile che dovrà essere dichiarata pubblica.
    Se il DB viene trovato la variabile farà riferimento al DB, in caso contrario verrà associata al file scelto.
    In entrambi i casi le operazioni verranno eseguite facendo riferimento a quella variabile indipendentemente dal foglio.



  • di pf92 (utente non iscritto) data: 17/06/2014 16:33:52

    Esatto!!il problema è proprio l'utilizzo di quelle...o sbaglio?