Saltar al contenido

Uso de AppActivate y Sendkeys en el comando de shell de VBA

La guía o código que encontrarás en este artículo es la resolución más fácil y válida que hallamos a esta inquietud o dilema.

Solución:

Sé que esta pregunta es antigua, pero me he encontrado con este mismo problema, pero no creo que la respuesta que se eligió sea la correcta.

Cuando llama a AppActivate, la secuencia de comandos se detiene y espera a que finalice la aplicación de destino. Una vez finalizada la aplicación, el script continúa. No veo solución a este problema.

EDITAR:

Uso un archivo por lotes para llamar a CSCRIPT para el comando AppActivate y noto que está usando estrictamente un archivo VBS. Intenta llamar CMD como una nueva ventana y pasar CSCRIPT //NoLogo //B WScript.CreateObject("WSCript.shell").AppActivate("Window Name") como argumento, y vea si eso evita el problema.

De manera similar, estaba tratando de usar AppActivate en un documento pdf que había abierto con un comando de shell para poder usar SendKeys en él. Siempre generaría el error de tiempo de ejecución ‘5’. Mi solución finalmente fue NO usar AppActivate en absoluto, de hecho, abrir el documento lo trae al frente de todos modos. El problema es que la instrucción SendKeys se ejecuta inmediatamente después del comando de shell, pero el pdf necesita uno o dos segundos para abrirse. Mi solución es pausar el código durante un par de segundos antes de ejecutar la instrucción sendkeys.

Utilicé una cortesía de retardo de tiempo de pootle flump. Consulte el hilo aquí: http://www.dbforums.com/microsoft-access/1219379-time-delay-vba.html

Después de horas de investigación en varios foros, pude darme cuenta de que no podré usar los objetos y funciones de la biblioteca de Adobe con Adobe Reader. La única opción viable que quedaba era usar los comandos de Shell para usar la opción “guardar como texto” disponible en el menú de archivos de Adobe Reader. El atajo key es alternativa+F+a+X+s. Los implementé en el siguiente código que funcionó perfectamente, aunque tuve que insertar retrasos en algunos pasos.

Sub SavePDFasText()
Dim AdobeReaderPath As String
Dim PdfFilePath As String
Dim PDFid, NotepdId As Double

AdobeReaderPath = "C:Program FilesAdobeReader 10.0ReaderAcroRd32.exe"
PdfFilePath = "D:PowerGenMacroopm_11.pdf"
PDFid = Shell(AdobeReaderPath & " " & PdfFilePath, vbNormalFocus)
Application.Wait TimeSerial(Hour(Now()), Minute(Now()), Second(Now()) + 5)
'Alt+f+a+x is required to save the pdf as text in the adobe reader
SendKeys "%(FAX)", True
Application.Wait TimeSerial(Hour(Now()), Minute(Now()), Second(Now()) + 2)
SendKeys "%S", True
SendKeys "^q", True

End Sub

Reseñas y puntuaciones

Si posees alguna desconfianza o disposición de modernizar nuestro reseña eres capaz de añadir una crítica y con gusto lo ojearemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *