2016-07-10 60 views
5

Ho un breve macro che inserisce una cella in modalità di modifica con il comando:quale finestra è attiva

Application.SendKeys "{F2}" 

La riga di codice viene eseguito correttamente se la macro viene eseguita dal foglio di lavoro utilizzando, per esempio, il normale interfaccia Ribbon (che è perché F2 mette la cella attiva in modalità Edit)

Se eseguo la macro dalla finestra diVBE, la macro non riesce perché la VBE interpretare s F2 essere un comando per visualizzare il Visualizzatore oggetti.

voglio includere un test nella macro per verificare questo:

Se il foglio di lavoro è la finestra attiva, procedere in esecuzione.
Se il VBE è la finestra attiva, emettere un messaggio MsgBox e interrompere.

Non so come determinare quale finestra è attiva. ActiveWindow.Caption visualizza sempre qualcosa di simile:

Book1.xlsm 
+1

Vedere se questo aiuta: http://stackoverflow.com/questions/33266859/vba-copypastecode-with -sendkeys/33269447 # 33269447 –

+1

Il valore nella cella sarà cambiato se il foglio di lavoro è attivo. Puoi controllare per un cambiamento? Invece di usare SendKeys, potresti usare un InputBox invece? –

+1

@ScottCraner L'idea è buona, ma lascia a fuoco la finestra * VBE * ................ Il metodo di Rodger funziona! –

risposta

6

Credo che è stato eseguito in un problema VBE purtroppo. Se la soluzione è evitare di commettere errori durante la codifica, questo funzionerà per te? Non sembra che ci sia un modo per vedere se l'activewindow è il VBE che potrei trovare. Se questa soluzione non soddisfa le tue esigenze, Using VBS in WHS potrebbe funzionare per te o chiamare un programma esterno come Autoit.

Si noti che non funzionerà se si sta passando il codice, ma presumo che si sia principalmente interessati a premere il pulsante Esegui all'interno della finestra VBE e funzionerà correttamente. Metti la prima riga nella parte superiore del tuo codice o subito prima della sezione con sendkeys o whatnot.

ThisWorkbook.VBProject.VBE.MainWindow.Visible = False 
If ActiveWindow.Caption <> "Book1.xlsm" Then MsgBox ("Test") Else MsgBox ("testelse") 

Non sarà in grado di alt-tab di nuovo, deve colpire Alt-F11

+0

Grazie mille ................ Testerò questo più tardi oggi ................... –

+1

Questo funziona per perfezione! Non ho bisogno di eseguire alcun test, basta chiudere la finestra * VBE * ....................... Grazie ancora! –