Imprimir página | Cerrar ventana

Sendkeys variable string no funciona Windows11

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=86814
Fecha de impresión: 27/Marzo/2026 a las 02:21


Tema: Sendkeys variable string no funciona Windows11
Publicado por: paloma
Asunto: Sendkeys variable string no funciona Windows11
Fecha de publicación: 03/Noviembre/2023 a las 12:53

Hola, hasta ahora venía pasando una variable string a Sendkeys para pasar los datos de varios controles de un formulario a un bloc de notas que me ayudásteis en este hilo  http://www.mvp-access.com/foro/pasar-datos-de-formulario-access-a-notepad_topic86521.html" rel="nofollow - Pasar datos de formulario access a Notepad - Foro de Access y VBA (mvp-access.com)

Pero ahora me han instalado windows 11 y no me funciona. Se me abre mil veces como loco archivos en blanco del Notepad

Creo que lo que afecta son los Enter que incluyo en la variable como vbCrLf porque cuando lo sustituyo por no hace eso pero es que no hace nada. Solo se abre el bloc de notas pero no pasa ningún valor.

Este es el código, ¿qué puedo hacer?
Shell "C:\WINDOWS\NOTEPAD.EXE", vbNormalFocus
str = Replace(str, "(", "-")
str = Replace(str, ")", "-")
SendKeys str
SendKeys "{NUMLOCK}" 

La línea SendKeys "{NUMLOCK}"  la pongo porque Sendkeys desconecta el teclado numérico y así lo vuelvo a conectar. Pero quitándola, tampoco funciona

Y es que además, pasando un simple
Shell "C:\WINDOWS\NOTEPAD.EXE", vbNormalFocus
Sendkeys "hola"

se abre el bloc pero no pasa el valor "hola"

Gracias.

Saludos,



Respuestas:
Publicado por: McPegasus
Fecha de publicación: 03/Noviembre/2023 a las 17:48

Hola Paloma,

Ya nos hemos dado cuenta de que nuestro Notepad ya no es el que era . Descanse en paz nuestro Notepad y que le den al nuevo Notepad.

Tras esta introducción quiero indicarte que por las pruebas que he realizado su actitud es divergente, unas veces escribe y otras no. Yo no seguiria por esta línea.

¿Se te ha ocurrido utilizar el método CreateObject("Scripting.FileSystemObject") para crear un archivo directamente?

Es más fiable para crear un archivo desde cero o abrir uno existente, modificar o crearle contenido y guardar los cambios.

Dinos si necesitas más información sobre ello, o como los masters son un poco quisqui lo que haría es crear un nuevo hilo.

Buen fin de semana.



-------------
Rafael [McPegasus]
Valencia
www.mcpegasus.net
..:: Tu Access, Mi Pasión ::..


Publicado por: paloma
Fecha de publicación: 03/Noviembre/2023 a las 20:49

Hola Pegasus, jope, al final después de dar muchas vueltas, he encontrado la solución.. 

Este código me funciona, pero mira, no sé hasta cuándo, hartita me ha dejado. Lo de crear objeto ¿te importaría xfa pasarme info para darle una vuelta también? Muuchas gracias.

Lo de incorporar una pausa, parece ser que en estas líneas se precisa porque si no se atora, eso he leído, y la verdad es que sí, sin la pausa no tira. En finnn

str = Replace(str, "(", "-")
str = Replace(str, ")", "-")
Dim X
X = Shell("C:\WINDOWS\NOTEPAD.EXE", 1)
esperar (0.5)
AppActivate X
esperar (0.5)
SendKeys str
SendKeys "{NUMLOCK}"

Saludos,


Publicado por: McPegasus
Fecha de publicación: 04/Noviembre/2023 a las 09:44
Claro, en la web tenemos disponible el artículo:  https://access-global.net/vba-metodo-opentextfile/" rel="nofollow - VBA: método OpenTextFile – Access Global (access-global.net)  con vídeo explicativo y todo.

Que lo disfrutes y lo uses.


-------------
Rafael [McPegasus]
Valencia
www.mcpegasus.net
..:: Tu Access, Mi Pasión ::..


Publicado por: paloma
Fecha de publicación: 08/Noviembre/2023 a las 01:53


Graciass!!! lo miro!

saludos


Publicado por: xavi
Fecha de publicación: 08/Noviembre/2023 a las 11:37
Hola,

Hay alternativas a SendKeys que evitan (en principio) el error

http://www.llodax.com/smf/index.php?topic=202.0" rel="nofollow - Emular SendKeys (llodax.com)

También invocar a la biblioteca de Word me funcionó en un caso (1068 lanza una PrintScreen)

    Dim wrdap
    Set wrdap = CreateObject("Word.Application")
    wrdap.WordBasic.SendKeys "{1068}"


Un saludo


-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: McPegasus
Fecha de publicación: 08/Noviembre/2023 a las 11:42
Gracias tomo nota, el Sendkeys parece infinito LOL.

En este caso, por las pruebas que he realizado es que el bloc de notas tras abrirse hace una pausa muy prolongada por lo que hay que hacer una pausa también prolongada para lanzar el SendKeys.

Aunque yo tomaría el camino de crear un txt ya que seguro en un futuro le volverá a sacar partido.


-------------
Rafael [McPegasus]
Valencia
www.mcpegasus.net
..:: Tu Access, Mi Pasión ::..


Publicado por: paloma
Fecha de publicación: 28/Diciembre/2023 a las 19:27

Hola, perdón la tardanza, muchas gracias por contestar a los dos. Xavi, con tú código me pasaba lo mismo, el Notepad se volvía loco y se abría sin parar. De hecho, se debió quedar pirado porque tuve que pedir asistencia para que me lo reinstalaran.

Al final lo conseguí con este código, cogiendo un poco de todo. Creé un fichero plano como borrador para llamarlo cada vez que lo necesite y escribir en él.

'Escribir en el fichero txt
Open "C:\Users\Documents\BD\DatosDemanda.txt" For Output As FreeFile
Print #1, str
Close

'Abrir el fichero
Shell "Notepad.exe C:\Users\Documents\BD\DatosDemanda.txt", vbNormalFocu


Se puede cerrar el hilo,

Saludos,



Imprimir página | Cerrar ventana