Velocizzazione procedure shell
Hai un problema con Excel? 
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.
Vuoi Approfondire?