Velocizzazione procedure shell



  • Velocizzazione procedure shell
    di frankmac data: 14/08/2015 19:13:45

    Ciao a tutti,
    per facilitare e velocizzare la compilazione di un file Excel, vorrei automatizzare ed eseguire alcune procedure che vado ad elencare qui di seguito:

    - apro il file excel
    - compilo i campi nelle celle A e B

    fino a qui tutto bene e nulla di particolare, di seguito invece:

    - seleziono da esplora risorse (explorer.exe) un file immagine che voglio copiare in una certa cartella (a path fisso)
    - aprire il file appena copiato con un editor immagini personalizzato
    - salvare il path + il nome file nella cella C di excel

    è possibile secondo voi automatizzare i 3 passaggi sopra elencati con una macro ?

    il massimo che io sono riuscito a fare è creare un pulsante che apre explorer nel path indicato ed aprire il file con il programma desiderato, ma io non sono al vostro livello e quindi chiedo aiuto a voi esperti
     
    'apro explorer nella cartella indicata
    Shell ("explorer.exe " & "F:Immagini"), vbNormalFocus
    
    'apro l'editor
    Shell (Chr(34) & "C:Program Files (x86)TechSmithSnagit 11Snagit32.exe " & Chr(34) & "/OE " & Chr(34) & "D:	mpUntitled.jpg" & Chr(34)), vbMaximizedFocus
    



  • di Vecchio Frac data: 14/08/2015 20:20:40

    Se sei riuscito a eseguire correttamente le prime due operazioni con Shell, e in effetti mi sembra che sia tutto giusto, la terza (cioè cit. " salvare il path + il nome file nella cella C di excel ") dovrebbe essere banale.





  • di frankmac data: 14/08/2015 21:01:31

    Ciao Vecchio Frac,
    in effetti il mio problema non è salvare il path nella cella, che confermo è banale, probabilmente ti è scappato un passaggio; quello che non riesco a fare è questo:

    - seleziono da esplora risorse (explorer.exe) un file immagine che voglio copiare in una certa cartella (a path fisso)

    in pratica ho una finestra di explorer aperta e con il file immagine selezionato, vorrei ricavare il path per poter fare poi un copia di quel file in un altra destinazione.

    Potresti darmi un aiutino, anche solo uno spunto per partire ?

    Grazie 1000.



  • di Vecchio Frac data: 14/08/2015 21:40:37

    Mica semplice... bisogna individuare il task che ha aperto l'Explorer (magari si può usare WMI) e poi non sono sicuro che si possa risalire alla "selezione"... la finestra di Esplora risorse è un treeview ma i suoi nodi non sono esposti all'esterno e basta.
    E' *molto* più facile che da Excel fai aprire all'utente un file con gli strumenti a disposizione (file dialog, getopenfilename e simili). Con questo sistema, siccome sei già dentro Excel, puoi fare quello che vuoi (aprire il file col tuo editor preferito, copiare il file, ecc.)





  • di frankmac data: 14/08/2015 22:35:43

    Sono d'accordo con te Vecchio Frac, è troppo complessa questa strada

    potresti farmi gentilmente un banale esempio per apire un file immagine da Excel ?



  • di Vecchio Frac data: 14/08/2015 22:44:28

    In modo grezzo, prova questo codice.
     
    Option Explicit
    
    Sub apri_file()
    Dim s As String
    Dim wshell As Object
    
        s = Application.GetOpenFilename
        MsgBox "Hai selezionato il file " & s & " che cercherò di aprire. Premi Ok", vbOKOnly
        
        'esegue una shell in modo SINCRONO, quindi attende il termine dell'esecuzione per proseguire
        Set wshell = CreateObject("WScript.shell")
        wshell.Run Chr(34) & s & Chr(34), 4, False
    
        Set wshell = Nothing
    End Sub
    






  • di frankmac data: 15/08/2015 22:46:58

    Alla faccia del "modo grezzo", guarda cosa è venuto fuori dal tuo codice

    In pratica mi hai dato lo spunto per riuscire a fare tutto ciò che mi serviva, ancora una volta non so proprio come ringraziarti Vecchio Frac   
     
        Dim s, NomeFile, CartDest As String
        Dim wshell As Object
        Dim riga As Integer
        
            s = Application.GetOpenFilename
            
            'esegue una shell in modo SINCRONO, quindi attende il termine dell'esecuzione per proseguire
            Set wshell = CreateObject("WScript.shell")
            NomeFile = Dir(s)
            CartDest = "D:PersSchedeImmagini Definitivepulite"
            FileCopy s, CartDest & NomeFile
            wshell.Run Chr(34) & "C:Program Files (x86)TechSmithSnagit 11Snagit32.exe " & Chr(34) & "/OE " & Chr(34) & CartDest & NomeFile & Chr(34), 4, False
            If ActiveCell.Column = 3 Then
                ActiveCell.Value = CartDest & NomeFile
            Else
                MsgBox ("Non sei sulla colonna giusta !"), vbExclamation, "Avviso"
            End If
            
            Set wshell = Nothing
            
            riga = ActiveCell.Row
            riga = riga + 1
            ActiveSheet.Cells(riga, 1).Select



  • di Vecchio Frac data: 16/08/2015 20:22:35

    Ne sono contento anche se ti faccio notare che "NomeDest" è inutile perchè la variabile "s" contiene già il nome del file prescelto e se devi ricavare il solo nome del file senza percorso, basta cercare con InstrRev l'ultima occorrenza dello slash per poi ricavare con Mid la parte che ti interessa.