ricerca di file



  • ricerca di file
    di chris (utente non iscritto) data: 29/09/2015 14:17:58

    vorrei sottoporti un caso :
    foglio Excel dove nella colonna A sono elencati una serie di nomi.
    il file è salvato all'interno di una cartella.
    accanto a questo file nella stessa cartella sono presenti tanti file ( PDF ) che hanno come nomi quelli contenuti nella colonna A del precedente file Excel.
    E' possibile fare in modo che nella colonna B accanto ad ogni rispettivo nome/codice compaia un pulsante che permette di lanciare l'apertura del rispettivo file ?

    se sto sognando siete autorizzati a svegliarmi :D :D
    grazieee
    Chris



  • di chris (utente non iscritto) data: 29/09/2015 14:22:05

    forse non sono stato chiaro ,
    intendo che ci sia una funziona che va a ricercare il file a seconda di quello scritto nella Colonna A , senza dover creare dei link manualmente...



  • di alfrimpa data: 29/09/2015 14:41:40

    Ciao Chris

    Non so se ho ben capito il tuo problema ma se in A1 hai il nome del file (completo del suo percorso es. c:prova uofile.pdf) ed in B1 metti = COLLEG.IPERTESTUALE(A1) in B1 avrai il collegamento che aprirà quello specifico file.

    Se non è così allega un piccolo file di esempio con la spiegazione di quello che vuoi ottenere.

    Alfredo





  • di chris (utente non iscritto) data: 29/09/2015 14:50:06

    non proprio
    allego un file ma è veramente banale.
    in pratica da un codice/nome scritto in una cella (colonna A) , la funziona che chiedo se esista andrà a cercare quel nome all'interno dei file.
    Se il file esiste tramite il pulsante nella colonna B potrò lanciarlo.

    spero di essere stato più chiaro :|



  • di Marius44 data: 29/09/2015 14:57:30

    Ciao Chris e ciao Alfredo
    Il file allegato, così com'è, non serve a nulla.
    Se vuoi aprire un file .pdf cliccando su un pulsante (ActiveX, non modulo) fai così:
    inserisci il pulsante nel tuo Foglio; nel codice del pulsante inserisci la macro sotto riportata (ovviamente sostituisci "tuopercorso" con quello reale).
    Posizionati nella cella in cui c'è il nome del file che vuoi aprire e clicca sul pulsante.
    Preciso: al momento non ho il pc con me e non ho potuto testare la macro, l'ho scritta a memoria. Dovrebbe andar bene.
    Ciao,
    Mario
     
    Private Sub CommandButton1_Click()
    Dim perc As String
    perc = "C:	uopercorso" & ActiveCell.Text & ".pdf"
    ActiveWorkbook.FollowHyperlink Address:=perc
    End Sub



  • di alfrimpa data: 29/09/2015 15:00:18

    Metto anche la mia che è poi quasi uguale a quella di Mario (che saluto) che apre semplicemente il file il cui nome è contenuto nella cella attiva.

    Alfredo
     
    Sub ApriPDF()
    Dim path As String
    path = "c:TuoPercorso"
    Workbooks.Open (path & ActiveCell.Value & ".pdf")
    End Sub
    






  • di alfrimpa data: 29/09/2015 15:08:58

    Ciao Chris e ciao Mario

    Le due macro fanno esattamente la stessa cosa (ovviamente anche la mia va associata ad una forma, immagine o pulsante di comando).

    L'unica differenza è che quella di Mario, prima di aprire il file, visualizza un messaggio del Centro di Protezione mentre la mia no.

    Alfredo





  • di alfrimpa data: 29/09/2015 15:49:45

    Ciao Chris

    Usa la macro di mario che a me funziona correttamente (io avevo fatto le prove solo con file di Excel)

    Alfredo





  • di alfrimpa data: 29/09/2015 15:56:41

    Comunque se in A1 hai il nome del file ed in B1 metti.

    ="C:Tuopercorso"&A1&".PDF" e ricopi in basso

    ed in C1 metti =COLLEG.IPERTESTUALE(B1) e ricopi in basso avrai il collegamento cliccabile e fai il tutto senza aver bisogno di macro.

    Alfredo





  • di chris (utente non iscritto) data: 29/09/2015 17:26:51

    complimentandomi con Mario anche perché ha fatto tutto a memoria devo dire che la macro funziona bene, apparte il messaggio di avviso che se si potesse ovviare ...
    vi chiedo se fosse possibile anche andare a cercare il "nomefile" (il solito pippo) all'interno di una cartella che può contenere sottocartelle ...
    immaginate una archivio di disegni magari suddiviso in cartelle ed un file Excel che li organizza e ne permette la rapida apertura a secondo determinati filtri...

    come si dice.. l'appetito vien mangiando :D :D
    grazie cmq siete bravissimi



  • di CHRIS (utente non iscritto) data: 29/09/2015 17:32:23

    sarebbe utilissimo inserire anche un controllo di presenza effettiva del file perché altrimenti quando non lo trova si incappa in erroraccio.



  • di chris (utente non iscritto) data: 30/09/2015 09:07:27

    buongiorno



  • di patel data: 30/09/2015 10:58:53

    prova così
     
    Private Sub CommandButton1_Click()
    Dim perc As String
    On Error Resume Next
    perc = "C:	uopercorso" & ActiveCell.Text & ".pdf"
    ActiveWorkbook.FollowHyperlink Address:=perc
    End Sub






  • di chris (utente non iscritto) data: 30/09/2015 11:29:44

    ottimo in questo modo rimane il messaggio di richiesta conferma di apertura di file pericolosi e se il file non esiste non appaiono errori. Si può eliminare tale richiesta ?
    Per la possibilità di ricercare il file all'interno di eventuali sottocartelle qualche possibilità ?

    grassie



  • di alfrimpa data: 30/09/2015 11:48:55

    Ciao Chris

    Rispondo alla tua prima domanda (per l'altra aspetterei altri pareri).

    Il messaggio che si visualizza è del Centro di Protezione di Excel che avverte della potenziale pericolosità dei collegamenti ipertestuali.

    Purtroppo tale messaggio non si riesce ad evitare con l''istruzione:

    Application.DisplayAlerts = False

    Personalmente ho anche provato a cercare nelle impostazioni del Centro di Protezione se vi fosse qualcosa per evitare ciò ma non ci sono riuscito (magari qualcun'altro riesce a dire qualcosa in più).

    Alfredo





  • di patel data: 30/09/2015 12:31:10

    non so perché il mio Excel non visualizza alcun messaggio





  • di CHRIS (utente non iscritto) data: 30/09/2015 14:21:43

    Deduco sia una impostazione del centro protezione...
    sono in attesa di qualche bella idea per ricercare il nome del file all'interno di una cartella e relative sottocartelle.
    grazie nuovamente



  • di patel data: 30/09/2015 14:52:55

    prova questa macro che prende il nome della cartella in A1 e da A2 in poi mette i link ai file della cartella
     
    Sub HyperlinksToDirectory()
    stDir = Range("A1")
    drow = 2
    stFile = Dir(stDir & "*.*")
    Do Until stFile = ""
      Cells(drow, 1).Hyperlinks.Add Anchor:=Cells(drow, 1), SubAddress:="", Address:=stDir & "" & stFile, TextToDisplay:=stFile
      drow = drow + 1
    stFile = Dir()
    Loop
    End Sub






  • di chris (utente non iscritto) data: 30/09/2015 15:13:32

    mi spiace ma non funge , non accade nulla..
    verificato con file presente "pippo.pdf"



  • di alfrimpa data: 30/09/2015 15:31:55

    Ciao Chris

    La macro di patel, supposto che in A1 ci sia una directory (es. c:prova) senza sottodirectory al suo interno fa un elenco da A2 in poi di tutti i file contenuti trasformandoli in collegamenti ipertestuali.

    Non credo che fosse questo che volevi.

    Alfredo





  • di chris (utente non iscritto) data: 30/09/2015 15:38:41

    carina la macro ,
    ma si ,in effetti fa un gran elencone di file...



  • di patel data: 30/09/2015 17:17:44

    guarda qui h t t p://www.excelforum.com/excel-programming-vba-macros/876646-macro-to-open-file-if-found-in-a-folder-or-any-subfolders.html





  • di CHRIS (utente non iscritto) data: 01/10/2015 08:52:28

    grazie,
    ma non ho le competenze sufficienti per integrare al mio caso .
    se ci fosse qualcuno tra voi sarei molto grato
    chris



  • di chris (utente non iscritto) data: 04/10/2015 12:22:31

    riporto qui il codice e allego il file scaricato dal link.
    mi rendo conto che è molto complesso ma funziona.
    ora mi servirebbe personalizzarlo ovvero :
    1) anzichè inserire manualmente il nome file da ricercare sarebbe molto utile che fosse preso il testo della cella attiva
    2) i file aperti sono eseguiti sempre com excel che si tratti di qualunque formato , con la conseguenza che si ottiene un foglio di lavoro in linguaggio incomprensibile : ogni file dovrebbe dunque essere aperto con il programma associato in windows

     
    Sub DefineFile()
        
        Dim myFiles As Variant
        Dim docname As String
        Dim myCountOfFiles As Variant
        
        'this inputbox could accept any file name specified without the extension, however it can be useful when accessing files_
        'stored with ids or reference numbers.
        
        docname = InputBox("Type in the file name you want to process")
    
        If docname = "" Then
        MsgBox "No file name entered", vbInformation, "Cancelled"
        Exit Sub
        End If
    
        Application.DisplayAlerts = False
        
        'this part will search the folder specified and all its subfolder for the file name entered
        'it will only check for the file with an .xls extension, change as required...you can use wildcards
        myCountOfFiles = Get_File_Names( _
                         MyPath:="C:UsersadminDesktop", _
                         Subfolders:=True, _
                         ExtStr:=docname & "*.*", _
                         myReturnedFiles:=myFiles)
     
        
            If myCountOfFiles = 0 Then
                MsgBox "File name " & docname & " has not been entered correctly or does not exist."
                Exit Sub
            End If
    
            'this part will call the Get_Data module and open the file specified if found
            OpenFile myReturnedFiles:=myFiles
    
    End Sub
    
    Sub OpenFile(myReturnedFiles As Variant)
        
        Dim mybook As Workbook
        Dim I As Long
    
        'turn off ScreenUpdating and EnableEvents
        With Application
            .ScreenUpdating = False
            .EnableEvents = False
        End With
    
        'Loop through all files in the array(myFiles)
        For I = LBound(myReturnedFiles) To UBound(myReturnedFiles)
            Set mybook = Nothing
            On Error Resume Next
            Set mybook = Workbooks.Open(myReturnedFiles(I))
            On Error GoTo 0
        Next I
        
    End Sub
    __________________________________________
    'DO NOT MODIFY THESE CODE EXCEPT EXPERIENCED
    Option Explicit
    
    Private myFiles() As String
    Private Fnum As Long
    
    Function Get_File_Names(MyPath As String, Subfolders As Boolean, _
                            ExtStr As String, myReturnedFiles As Variant) As Long
    
        Dim Fso_Obj As Object, RootFolder As Object
        Dim SubFolderInRoot As Object, file As Object
    
        'Add a slash at the end if the user forget it
        If Right(MyPath, 1) <> "" Then
            MyPath = MyPath & ""
        End If
    
        'Create FileSystemObject object
        Set Fso_Obj = CreateObject("Scripting.FileSystemObject")
    
        Erase myFiles()
        Fnum = 0
    
        'Test if the folder exist and set RootFolder
        If Fso_Obj.FolderExists(MyPath) = False Then
            Exit Function
        End If
        Set RootFolder = Fso_Obj.GetFolder(MyPath)
    
        'Fill the array(myFiles)with the list of Excel files in the folder(s)
        'Loop through the files in the RootFolder
        For Each file In RootFolder.Files
            If LCase(file.Name) Like LCase(ExtStr) Then
                Fnum = Fnum + 1
                ReDim Preserve myFiles(1 To Fnum)
                myFiles(Fnum) = MyPath & file.Name
            End If
        Next file
    
        'Loop through the files in the Sub Folders if SubFolders = True
        If Subfolders Then
            Call ListFilesInSubfolders(OfFolder:=RootFolder, FileExt:=ExtStr)
        End If
    
        myReturnedFiles = myFiles
        Get_File_Names = Fnum
    End Function
    
    Sub ListFilesInSubfolders(OfFolder As Object, FileExt As String)
    
        Dim SubFolder As Object
        Dim fileInSubfolder As Object
    
        For Each SubFolder In OfFolder.Subfolders
            ListFilesInSubfolders OfFolder:=SubFolder, FileExt:=FileExt
    
            For Each fileInSubfolder In SubFolder.Files
                If LCase(fileInSubfolder.Name) Like LCase(FileExt) Then
                    Fnum = Fnum + 1
                    ReDim Preserve myFiles(1 To Fnum)
                    myFiles(Fnum) = SubFolder & "" & fileInSubfolder.Name
                End If
            Next fileInSubfolder
    
        Next SubFolder
    End Sub



  • di patel data: 04/10/2015 13:50:54

    prova il file allegato





  • di chris (utente non iscritto) data: 04/10/2015 14:35:09

    ohh molto bene,
    è molto buono ! questo è un servizio molto potente da mettere nel mio file.
    perdonami se abuso della tua disponibilità : qual'è la parte di codice da sostituire per fare in modo che il testo da ricercare sia quello contenuto nella cella attiva ?



  • di patel data: 04/10/2015 14:50:04

    docname = Activecell.Text





  • di CHRIS (utente non iscritto) data: 05/10/2015 11:29:09

    Patel grazie ancora ,
    il risultato è straordinario .
    già siamo a livelli altissimi ma come in tutte le messe a punto ci sono cose che si possono aggiungere percui io provo a fare un'altra domanda hehehe ..
    sulla falsa riga della mostruosa macro appena generata , credete sia possibile che celle di un determinato range si colorino ad esempio di verde se esiste un file che si chiama come nel testo contenuto nelle celle stesse ?
    in questo modo avrei una videata che fa autodiagnostica (evento scatenante apertura file ).
    gentilissimi buona giornata



  • di patel data: 05/10/2015 12:52:24

    allega l'ultima versione del file e proviamo





  • di chris (utente non iscritto) data: 05/10/2015 14:36:59

    patel ,
    l'ultima versione è proprio il file che hai fatto tu :D :D :D



  • di patel data: 05/10/2015 16:48:53

    ecco la modifica
     
    Sub DefineFile()
        
        Dim myFiles As Variant, fpath As String
        Dim docname As String
        Dim myCountOfFiles As Variant
        Application.DisplayAlerts = False
        fpath = Range("B3").Text
        docname = Range("B4").Text
        myCountOfFiles = Get_File_Names( _
                         MyPath:=fpath, _
                         Subfolders:=True, _
                         ExtStr:=docname & ".*", _
                         myReturnedFiles:=myFiles)
     
        
            If myCountOfFiles = 0 Then
                MsgBox "File name " & docname & " has not been entered correctly or does not exist."
                Exit Sub
            Else
                Range("B4").Interior.ColorIndex = 4
            End If
    
            'this part will call the Get_Data module and open the file specified if found
            OpenFile myReturnedFiles:=myFiles
    
    End Sub






  • di chris (utente non iscritto) data: 06/10/2015 12:23:18

    ciao Patel ,
    ho provato e in questo modo viene colorata la sola cella B4 e solo al momento della pressione.
    Credi sia fattibile che tutte le celle del range B1:Z100 si colorino se al loro interno è presente un nome che ha un omonimo file , e tutto ciò avvenga all'apertura del file ?
    grazie e buona giornata (uggiosa)



  • di patel data: 06/10/2015 12:41:59

    l'hai detto tu che l'ultima versione era la mia





  • di chris (utente non iscritto) data: 06/10/2015 14:09:47

    si patel era il tuo infatti con la correzione dell' "active cell" ... perciò diventa come posto sotto.
    però il discorso di automatizzare un range che c'entra con l'ultima versione ? quella è altra cosa ..
     
    If myCountOfFiles = 0 Then
                MsgBox "File name " & docname & " has not been entered correctly or does not exist."
                Exit Sub
            Else
                ActiveCell.Interior.ColorIndex = 4
            End If



  • di CHRIS (utente non iscritto) data: 07/10/2015 11:19:04

    buongiorno,
    se qualcuno ha idee son tutto orecchie