Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    [VBA EXCEL] Aprire un file con VBA

    In una listbox ho un elenco di files letti da uno dei dischi del PC.
    Seleziono un file (escludo gli exe ed i files di sistema per non avere brutte sorprese).
    premo sul pujlsante "Apri File" per aprire il file selezionato.
    Il codice è questo:
    codice:
    Private Sub CommandButton3_Click()
    Dim NomeFile As String
    Dim NomeProgramma, Extension
    Dim Ret
    NomeFile = TextBox1 & ListBox2.Text
    'Es.: D:\documenti_miei\nwind2003.mdb
    Extension = LCase(Mid(NomeFile, InStrRev(NomeFile, ".") + 1))
    Select Case Extension
        Case "htm", "html", "php", "php", "js", "php4", "asp", "css", "inc", "SQL", "sql"
            NomeProgramma = "C:\Program Files\Adobe\Adobe Dreamweaver CS5\Dreamweaver.exe"
        Case "txt", "memo", "ref", "ta"
            NomeProgramma = "notepad.exe"
        Case "doc"
            Ret = Shell("rundll32.exe url.dll,FileProtocolHandler " & NomeFile)
            Exit Sub
        Case Else
            MsgBox "Il file selezionato non è idoneo all'apertura"
            Exit Sub
    End Select
    Shell (NomeProgramma & " " & NomeFile & ""), 1
    End Sub
    Fin qui va tutto bene: i files descritti nei vari CASE si aprono col programma previsto.

    Quel che chiedo è questo:
    è possibile l'apertura di tutti i files di tipo documento (quindi anche .zip, .rar, .pub, .gif, .mid, ecc) con gli appropriati programmi?

    NB uso il VBA di excel 2003 e sporadicamente di excel 2010

    Grazie per l'eventuale interessamento.

  2. #2
    Non ho a disposizione nè Excel nè VBA, quindi vado solo a memoria: se non ricordo male, basta inserire il percorso del file come argomento della Shell, e il file verrà eseguito con il programma predefinito del sistema operativo.

  3. #3
    Grazie per la risposta, MdE2005.
    Quindi, da come dici, come ho fatto per i files doc
    codice:
        Case "doc"
            Ret = Shell("rundll32.exe url.dll,FileProtocolHandler " & NomeFile)
            Exit Sub
    Basta solo prolungare la lista nel Case:
    Case "doc", "gif", "jpg", "png", ecc
    Ci provo e faccio sapere

    Grazie intanto

  4. #4
    Ciao MdE2005,
    come promesso debbo dire che la modifica che ho fatto nel Case funziona con tutti i files.
    Quindi posso di volta in volta decidere quali files aprire da VBA.

    Grazie per il suggerimento

  5. #5
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Non serve alcun Case.

    Il comando è 'generico', ovvero Windows userà automaticamente il programma associato a quell'estensione dato che il sistema lo conosce già, quindi basta solo un comando a cui passare il percorso completo del file.

    Con rundll32.exe si possono eseguire moltissime altre funzionalità. Ulteriori info qui:
    http://www.powerbasic.com/support/fo...ML/005172.html

    però gli esempi forniti sono da prendere con le pinze perchè alcuni funzionano solo nelle vecchie versioni di Windows, dove la sicurezza era solo un 'sentito dire'.


  6. #6
    Ciao gibra e grazie della preziosa informazione.
    Quindi basta semplicemente questo:
    codice:
     
    rundll32.exe shell32.dll,OpenAs_RunDLL "d:\path\filname.ext"
    Però come debbo implementarlo?
    messo così oppure
    codice:
    Ret = rundll32.exe shell32.dll,OpenAs_RunDLL NomeFile
    mi da errore
    mentre scrivo il codice mi da:
    errore di compilazione
    previsto fine istruzione

    mentre lo eseguo mi da:
    errore di compilazione
    errore di sintassi
    Sarebbe bello usare questa istruzione ma ti sarei grato se mi aiutassi a scriverla

  7. #7
    No, asp..........
    Forse ho già tale implementazione con
    codice:
    Ret = Shell("rundll32.exe url.dll,FileProtocolHandler " & NomeFile)
    Se è così basta mandare tutto a questa istruzione? (fatta l'eccezione per quei files che voglio siano aperte con Dreamweaver)
    Grazie ancora

  8. #8
    Come già detto in precedenza, la Shell esegue il programma associato al file descritto nel primo argomento, per cui se ad esempio MSWord è il programma predefinito per i file ".doc", se scrivi
    codice:
    shell "c:\miofile.doc"
    tale file verrà aperto con MSWord; da verificare tale funzione con i 'nuovi' sistemi operativi di casa MS.

  9. #9
    Grazie ancora MdE2005
    Proverò subito la nuova istruzione e farò sapere

  10. #10
    Finite le prove e questa è la situazione:
    Dunque ho provato l'istruzione che mi hai fornito e queste sono i risultati ottenuti:

    codice:
    my_Path = "D:\documenti_miei\nome_file.doc"
    Shell (my_Path) ' con e senza parentesi
    mi da questo errore
    errore di run-time 5
    chiamata di routine o argomento non validi

    Con l'istruzione mostrata prima il documento viene aperto regolarmente con l'applicazione a cui è associato
    codice:
    my_Path = "D:\documenti_miei\nome_file.doc"
    Shell ("rundll32.exe url.dll,FileProtocolHandler " & my_Path)
    Il test l'ho eseguito con excel 2003 ed excel 2010
    Non so se funziona con excel 2007.
    Per completezza posto l'intera funzione così come ora è stata modificata: rispetto alla prima versione mi sembra molto più chiara
    codice:
    Function Open_file(my_Path)
    Dim Extension, NomeProgramma, Ret
    Extension = LCase(Mid(my_Path, InStrRev(my_Path, ".") + 1))
    Select Case Extension
        Case "htm", "html", "php", "php", "js", "php4", "asp", "css", "inc", "SQL", "sql"
            NomeProgramma = "C:\Program Files\Adobe\Adobe Dreamweaver CS5\Dreamweaver.exe"
            Shell (NomeProgramma & " " & my_Path & ""), 1
        Case "doc", "mdb", "gif", "jpg", "png", "txt"
            Shell ("rundll32.exe url.dll,FileProtocolHandler " & my_Path)
    '        Shell (my_Path)
            Exit Function
        Case Else
            MsgBox "Il file selezionato non è idoneo all'apertura"
        Exit Function
    End Select
    End Function
    La funzione viene così chiamata
    codice:
    Dim NomeFile As String
    NomeFile = TextBox1 & ListBox2.Text    ' D:\documenti_miei\nome_file.doc
    Open_file (NomeFile)
    NB:
    ho messo i 2 case perchè
    col primo voglio che i files indicati vengano aperti con Dreamweaver, anche se non sono associati ad esso
    nel secondo indico solo i files che voglio siano aperti dal programma predefinito, per gli altri files non desidero l'apertura


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.