chiudi directory



  • chiudi directory
    di Jack63 (utente non iscritto) data: 13/10/2014 18:14:49

    Ho un problema da risolvere ma non riesco a risolverlo, provo a spiegare
    tramite una macro che legge il percorso in una cella di un foglio excel, apre la directory dove all'interno ci sono diversi fogli di lavoro, quello che volevo fare è appena seleziono il file da aprire, il filesi può aprire o con il doppio click oppure con l'invio della tastiere appena apro il file è possibile chiudere la directory dove si trovava il file.
    Allego il codice che apre la directory

     
    Sub Apri_Direct_Mar()
        Dim FilePath As Variant
        FilePath = ActiveSheet.Range("C14").Value 
        If FilePath = "" Then Exit Sub
        ExecuteFile (FilePath)
    End Sub
    
    Public Sub ExecuteFile(FilePath As String)
        On Error GoTo error
        Dim ret As Integer
        ret = Shell("rundll32.exe url.dll,FileProtocolHandler " & (FilePath), vbNormalFocus)
        Exit Sub
    error:
        MsgBox Err.Description, vbExclamation, "Error"
    End Sub
    
    



  • di lepat (utente non iscritto) data: 13/10/2014 20:20:47

    se il tuo scopo è avere una finestra di dialogo da cui selezionare un file excel ed aprirlo non è questo il modo corretto per farlo



  • di Jack63 (utente non iscritto) data: 13/10/2014 20:42:43

    bè io devo aprire la directory, il cui percorso è nella cella C14, dopo aver aperto la directory all'interno ci sono diversi file excel, una volta individuato file interessato per aprirlo doppio click oppure invio da tastiera, a questo punto la directory si deve chiudere, mentre il file deve rimanere aperto.



  • di Lucas87 data: 13/10/2014 20:54:57

    Magari c'è un suo perchè (spero)...ma quello che vuoi fare non ha senso.
    Se l'obiettivo è aprire un file, come è già stato detto, esistono altri metodi.
    Potresti spiegare il motivo della richiesta?



  • di Jack63 (utente non iscritto) data: 13/10/2014 21:26:51

    se ci sono altri modi più giusti ben vengano, il problema e:
    ci sono diverse cartelle una per ogni mese tipo Gen Feb Mar ecc
    all'interno di ogni cartella c'è un file per ogni giorno con nome tipo 1 Gen 14, 2 Gen 14 ecc.
    quando devo aprire un file devo aprire prima la catella e poi selezionare il file.
    se ci sono altri modi vanno bene l'importante e che posso scegliere il file da aprire, e una volta aperto la cartella venga chiusa.



  • di Zer0Kelvin data: 13/10/2014 21:52:17

    Ciao.
    Mi sembra che ci sia parecchia confusione.
    La routine che utilizzi non serve ad "aprire una directory", ma ad eseguire un file o un url.
    Se le passi un percorso locale, l'effetto sarà quello di aprire un'istanza di Explorer.exe posizionata sulla directory specificata.
    A meno di fare cose piuttosto astruse, tipo definire una classe Excel.Application ed impostare un apposito evento app_WorkbookOpen, recuperare l'HWind del processo explorer e terminarlo tramite l'utilizzo di diverse funzioni API, quello che chiedi non si può fare.
    Excel prevede diverse (Tipo GetOpenFilename) funzioni che possono essere utilizzate allo scopo.
    Sarei curioso di capire come sei arrivato a quel codice.



  • di lepat (utente non iscritto) data: 13/10/2014 21:54:04

    è questa tua insistente richiesta (chiudere la cartella) che lascia perplessi, chidere la cartella è una cosa sensa senso, chiudere la finestra di scelta invece ha senso.



  • di Jack63 (utente non iscritto) data: 13/10/2014 22:01:45

    scusami lepat, non è questione di insistenza ma di esperienza, forse e proprio la finestra di scelta che devo chiudere ed io mi ostino a chiamarla cartella, scusami ancora, comunque vedo che hai capito il mio problema!



  • di Zer0Kelvin data: 13/10/2014 22:03:44

    Tanto per chiarire il reale scopo della sub ExecuteFile provate ad eseguire questo (togliete prima gli spazi dall'indirizzo di google.
     
    Sub Test()
        ExecuteFile ("h t t p s://www.google.it")
    End Sub
    
    Public Sub ExecuteFile(FilePath As String)
        On Error GoTo error
        Dim ret As Integer
        ret = Shell("rundll32.exe url.dll,FileProtocolHandler " & (FilePath), vbNormalFocus)
        Exit Sub
    error:
        MsgBox Err.Description, vbExclamation, "Error"
    End Sub
    



  • di Zer0Kelvin data: 13/10/2014 22:05:08

    Si, ma tu non hai afferrato il senso delle risposte, non è quello il sistema per aprire una finestra di dialogo apertura file...



  • di Zer0Kelvin data: 13/10/2014 22:16:08

    Probabilmente quello che cerchi di fare è qualcosa del genere
     
    Sub Apri_Direct_Mar()
        Dim FilePath As Variant, Fname As String
        FilePath = ActiveSheet.Range("C14").Value
        If FilePath <> "" Then
            ChDir (FilePath)
            Fname = Application.GetOpenFilename
            If Fname <> "Falso" Then Workbooks.Open (Fname)
        End If
    End Sub
    



  • di Jack63 (utente non iscritto) data: 13/10/2014 22:57:02

    ciao Zer0Kelvin in effetti io specifico il percorso dentro la cella C14, come dici si apre un'istanza di Explorer posizionato sulla directory specificata, e fin qui tutto bene, il problema sorge quando io scelgo un file all'interno della directory specificata e decido di aprirlo e possibile chiudere l'istanza di Explorer. perche con il codice da mè allegato funziona tutto a meraviglia solo che resta aperta l'istanza di Explorer.
    Ho provato l'ultimo codice da tè allegato solo che l'istanza di Explorer che si apre non è quella specificata nella cella "C14".
    Spero che mi puoi aiutare a risolvere il problema grazie



  • di Zer0Kelvin data: 13/10/2014 23:30:58

    Quella che si apre usando GetOpenFilename non è un'istanza di esplorer, ma una finestra di dialogo di Excel; una cosa alquanto diversa.
    Comunque, se il path specificato in C14 si trova su un disco differente, bisogna aggiungere un'istruzione per cambiare il drive di default; vedi sotto
     
    Sub Apri_Direct_Mar()
        Dim FilePath As Variant, Fname As String
        FilePath = ActiveSheet.Range("C14").Value
        If FilePath <> "" Then
            ChDrive (FilePath)
            ChDir (FilePath)
            Fname = Application.GetOpenFilename
            If Fname <> "Falso" Then Workbooks.Open (Fname)
        End If
    End Sub



  • di Jack63 (utente non iscritto) data: 14/10/2014 12:24:43

    Grazie Zer0Kelvin sembra funzionare tutto