apertura finestre e input tastiera
Hai un problema con Excel? 
apertura finestre e input tastiera
di Giu8686 (utente non iscritto) data: 23/09/2014 15:18:38
Avrei la necessità di compilare i campi presenti in una finestra di un programma indipendente (chiamiamolo X). Per evitare di toccare X, avrei pensato di risolvere il problema:
1. avviando excel
2. avviando una macro che:
A. selezioni la finestra in background
B. inserisca caratteri nell'input da tastiera, in modo che il programma X non possa distinguere tra un inserimento manuale da parte di un operatore o un inserimento automatico. Ovviamente l'input conterra testi presenti in celle di excel alternati da Tab per saltare da un campo all'altro della maschera del programma X.
Si puo' fare?
Nel caso, mi sapreste dire come fare ad aprire le finestre di un altro programma e come inserirsi nell'input da tastiera?
di Zer0Kelvin data: 23/09/2014 21:50:10
Ciao.
Si può fare; per aprire un programma puoi utilizzare Shell, e per inviare sequenze di caratteri puoi utilizzare Application.SendKeys. Sotto trovi un esempio.
Se se però hai necessita di interagire con excel durante l'inserimento la faccenda si complica notevolmente.
Sub Test()
Shell "notepad.exe", vbNormalFocus
Application.SendKeys "XYZ" & vbCrLf & vbTab & "ABC"
End Sub
|
di Zer0Kelvin data: 23/09/2014 21:53:49
PS: perchè tutto funzioni, il primo campo di imput della seconda applicazione dovrebbe essere già attivo, oppure attivabile inviando una sequenza di tasti (TAB, ENTER ecc...)
di Giu8686 (utente non iscritto) data: 23/09/2014 22:03:20
Pefetto, grazie!! Adesso vedo di far tesoro dei tuoi consigli. Se ho dei problemi posto la bozza. Non credo che il mio caso ricada nelle due situazioni più complicate da te ipotizzate, quindi credo che quanto mi hai detto sia sufficiente. Thanks!!
di Giu8686 (utente non iscritto) data: 24/09/2014 01:49:55
Se non ho capito male, il codice che mi hai postato mi apre un applicazione. Il fatto è che io vorrei passare ad un applicazione già aperta.
Comunque informandomi a partire dalle tue indicazioni ho trovato i seguenti codici.
- Il primo in verità non va bene per il mio caso, dato che non mi viene aperta la finestra figlia (ad esempio il campo Trova di word), ma mi apre la finestra madre (per cui scrive direttamente sul foglio anziché nel campo di ricerca lasciato aperto prima di attivare la macro). Mi piacerebbe capire come aprire le finestre figlie.. se qualcuno sa come fare...
- Il secondo è banale per la sua semplicità, va bene per il mio caso, ma forse sarebbe meno versatile per situazioni appena più complicate.
' PRIMA ALTERNATIVA
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare Function SetForegroundWindow Lib "user32" ( _
ByVal hWnd As Long) As Long
Sub AAA()
Dim hWnd As Long
hWnd = FindWindow(vbNullString, "Doc1 - Microsoft Word")
If hWnd Then
SetForegroundWindow hWnd
End If
End Sub
Sub Test()
AAA
Application.SendKeys "ParolaCercata"
End Sub
'SECONDA ALTERNATIVA
Sub Test()
Application.SendKeys ("%{TAB}") '<- combo alt+tab
Application.SendKeys "BlaBla"
End Sub |
Vuoi Approfondire?