En una entrada anterior vimos qué formas teníamos a nuestro alcance para ver el resultado de la celda en lugar de la fórmula o incluso en algunos casos un error de #¿NOMBRE? por que la versión no detecte nuestra función correctamente (ver entrada).
Al hilo de esta entrada anterior, un lector planteaba la posibilidad de automatizar el proceso manual, celda por celda, de ir presionando la tecla de función F2 (edita celda) más ENTER a continuación:
Para tal fin necesitaremos emplear en una macro que crearemos el método .SendKeys que envía pulsaciones de la tecla que indiquemos.
La sintaxis es
expresión.SendKeys(Keys, Wait)
y el argumento Keys, esto es, la tecla sobre la que podemos forzar pulsaciones puede ser entre otras:
Tecla y Código
BORRAR := {CLEAR}
SUPRIMIR o SUPR := {DELETE} o {DEL}
FLECHA ABAJO := {DOWN}
FLECHA ARRIBA := {UP}
FLECHA IZQUIERDA := {LEFT}
FLECHA DERECHA := {RIGHT}
FIN := {END}
INTRO (teclado numérico) := {ENTER}
ENTRAR := ~ (tilde)
AV PÁG {PGDN}
RE PÁG {PGUP}
F1 a F15 := {F1} a {F15}
Admitiendo además las combinaciones provistas por Excel con MAYÚS o CTRL o ALT.
Para especificar una tecla combinada con otra u otras teclas:
MAYÚSCULAS := + (signo más)
CONTROL := ^ (signo exponencial)
ALT := % (signo de porcentaje)
Una solución al problema, además de alguna alternativa más, era manualmente ir editando la celda y validándola, esto es, presionando celda a celda F2 + ENTER... lo que para cientos de datos podría ser un engorro.
La siguiente macro realiza la misma acción empleando .SendKeys.
Accederemos a la ventana de código del explorador del editor de VBA, donde insertaremos el siguiente código VBA:
Ojo por que la condición inicial de formato de celda a Número o General se mantiene.
Fijémonos en la combinación de teclas ordenada
{F2}+{ENTER}
tecla función F2 y Mayúscula y ENTER, lo que recorrerá en sentido inverso (mayúscula y Enter cambia celda hacía arriba, y no hacía abajo como es normal).
Podemos ver el efecto en el vídeo siguiente:
Al hilo de esta entrada anterior, un lector planteaba la posibilidad de automatizar el proceso manual, celda por celda, de ir presionando la tecla de función F2 (edita celda) más ENTER a continuación:
...Tengo seleccionado un rango de celdas, y necesito una macro que para cada celda seleccionada me haga las funciones de "F2+ENTER"... |
Para tal fin necesitaremos emplear en una macro que crearemos el método .SendKeys que envía pulsaciones de la tecla que indiquemos.
La sintaxis es
expresión.SendKeys(Keys, Wait)
y el argumento Keys, esto es, la tecla sobre la que podemos forzar pulsaciones puede ser entre otras:
Tecla y Código
BORRAR := {CLEAR}
SUPRIMIR o SUPR := {DELETE} o {DEL}
FLECHA ABAJO := {DOWN}
FLECHA ARRIBA := {UP}
FLECHA IZQUIERDA := {LEFT}
FLECHA DERECHA := {RIGHT}
FIN := {END}
INTRO (teclado numérico) := {ENTER}
ENTRAR := ~ (tilde)
AV PÁG {PGDN}
RE PÁG {PGUP}
F1 a F15 := {F1} a {F15}
Admitiendo además las combinaciones provistas por Excel con MAYÚS o CTRL o ALT.
Para especificar una tecla combinada con otra u otras teclas:
MAYÚSCULAS := + (signo más)
CONTROL := ^ (signo exponencial)
ALT := % (signo de porcentaje)
Una solución al problema, además de alguna alternativa más, era manualmente ir editando la celda y validándola, esto es, presionando celda a celda F2 + ENTER... lo que para cientos de datos podría ser un engorro.
La siguiente macro realiza la misma acción empleando .SendKeys.
Accederemos a la ventana de código del explorador del editor de VBA, donde insertaremos el siguiente código VBA:
Sub Macro2() Dim celda As Range For Each celda In Range("B2:B12") celda.Select SendKeys "{F2}+{ENTER}", True Next celda End Sub
Ojo por que la condición inicial de formato de celda a Número o General se mantiene.
Fijémonos en la combinación de teclas ordenada
{F2}+{ENTER}
tecla función F2 y Mayúscula y ENTER, lo que recorrerá en sentido inverso (mayúscula y Enter cambia celda hacía arriba, y no hacía abajo como es normal).
Podemos ver el efecto en el vídeo siguiente:
Hola Ismael, excelente ayuda como siempre; pero, si el rango es variable tanto en posición así como en longitud, ¿cómo debo cambiarlo?
ResponderEliminarSaludos y muchas gracias!
Hola Alberto, muchas gracias ;-)
Eliminarla forma de trabajar con un rango variable (en sentido de celdas y posición) no sería problema, se podría solucionar de muchas formas, pero parece que en este caso lo más sencillo sería sacar un inputbox par que el usuario defina el rango.
Sería algo así:
Sub Macro2()
Dim celda As Range, rng As Range
Set rng = Application.InputBox("indique rango", Type:=8)
For Each celda In Range(rng.Address)
celda.Seletc
SendKeys "{F2}+{ENTER}", True
Next celda
End Sub
Saludos
entonces como quedaria
ResponderEliminarf2+control+shift+enter
ya que es una matricial
Hola Eduardo,
Eliminarque tal estás?, un placer saludarte igualmente.
Fíjate que la explicación se indican cuáles son las descripciones para cada tecla, por tanto la combinación para
f2+control+shift+enter
sería:
SendKeys "{F2}^+{ENTER}", True
Prueba y comentas.
Un saludo
Que tal, como estas??
ResponderEliminarEn primer lugar les agradezco por el gran aporte, y me gustaría preguntar una cosa; ¿Como puedo programar la tecla inicio del teclado en un botón?, ya que he estado trabajando con un teclado virtual y la programación de esa tecla me ha dado varios problemas, le agradecería que me apoyaran.
Hola Emmanuel,
Eliminarla tecla de inicio, creo recordar que es {HOME},
con las mismas condiciones que el resto de teclas para combinarlas con Ctrl, Mayusc o Alt.
Saludos
como puedo programar la tecla de tabulador
ResponderEliminarHola Ricardo,
Eliminarcómo estás?, un placer saludarte igualmente.
tabulador sería {TAB}
Un cordial saludo
Hola
ResponderEliminarYo tengo un rango
Range("C7:L7").Select
De este rango necesuto mover se puede decir el puntero de Excel o donde se escribe hacia la siguiente celda con el siguiente comando
SendKeys "{TAB}", True
Pero en excel no se mueve, se mueve mi proyecto de VB ja ja ja ¿que me falta para que se mueva el puntero? y despues seleccione hasta abajo con el siguiente comando
Range(Selection, Selection.End(xlDown)).Select
Hola,
Eliminarpara que te funcione 'normalmente', debes ejecutar tu macro desde la hoja de cálculo y no desde la ventana del Editor de VB.
el método SendKeys actúa sobre el cursor allá donde esté activo
Saludos
Hola Ismael
ResponderEliminarComo le puedo quitar ese parpadeo, use el Application.ScreenUpdating= false pero no lo quita
Sub Actualizar()
Application.ScreenUpdating = False
Dim celda As Range
For Each celda In Range("AD2:AD200")
celda.Select
SendKeys "{F2}+{ENTER}", True
Next celda
End Sub
Hola José,
Eliminarpor desgracias no hay otra manera...
A veces hay acciones que se ven reflejadas en pantalla, a pesar del uso de .ScreenUpdating
Saludos
Hola buenas Noches,
ResponderEliminarCada vez que ejecuton SendKeys "{F}" se apaga luces de teclado Bloq Lock y Block Mayus.
He buscado mucho y no encuento una solucion.
Sub prueba()
SendKeys "{F}"
End Sub
Hola Rene,
Eliminar¿y que´quieres conseguir presionando:
SendKeys "{F}"
??
Normalmente se presiona una techa de función, por ejemplo:
SendKeys "{F2}"
Quedo atento
Hola
EliminarIsmael
Necesito detener todas las macros por lo que he generado un error y al presionar la tecla F esta cierra el cuadro de error.
Igual lo he probado con otra macro escribiendo en una celda y es el mismo resultado.
Ismael,
Eliminarhe realizado un prueba con F1 y F2, me pasa lo mismo
tengo Office 2007, instale Office 2016 y me pasa lo mismo
??
Eliminarlo siento, pero no sé darte una respuesta...
Este comentario ha sido eliminado por el autor.
ResponderEliminarNECESITO EJECUTARLA DESDE EXCEL SOBRE UNA WEB, Y ME OBLIGA A USAR SIEMPRE EL METODO DOUBLE CLICK, PERO QUIERO QUE APENAS ABRA LA WEB SENCILLAMENTE EJECUTE UNA LISTA DE PASOS QUE YA ESTA CONTABILIZADA PARA PODER ENTRAR A ESA PAGINA, Y NO VEO UN MODELO QUE ME AYUDEN PODRIAS HECHARME UNA MANO
ResponderEliminar¿¿??
Eliminarno entiendo
Cómo podría, después de activar la celda con F2, pegar un texto que tengo en el portapapeles?
ResponderEliminarBásicamente que con la macro se ejecuta lo que yo haría manualmente F2 y Ctrl V
Hola David,
Eliminarun placer saludarte igualmente.
Quizá lo más simple, si quieres anexar al contenido de una celda otro texto adicional, sería:
range(celda).value=range(celda).value & "texto copiado(quizá otra celda range(celda).value"
Espero te sirva la idea
Saludos cordiales
Presionando las teclas Window + d minimiza todas las aplicaciones abiertas. ¿cómo lo haría con vba?
ResponderEliminarHola Willian
Eliminarqué tal estás?, un placer saludarte y poder colaborar con tu duda.
hace tiempo usando una API de windows funcionaba (no sé si aú siga funcionando para Windows 10):
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Sub Minimizar()
Call keybd_event(&H5B, 0, 0, 0)
Call keybd_event(&H4D, 0, 0, 0)
Call keybd_event(&H5B, 0, &H2, 0)
End Sub
Saludos
Hola, estoy usando SendKeys "text" para rellenar con texto donde este posicionado el cursor. Hay manera de darle formato a ese texto? es decir si quiero que hay en el texto salto de linea, por ejemplo y no que salga todo seguido, todo junto. Gracias
ResponderEliminarHola Gabriel,
Eliminarpodrías hacer algo así
Application.SendKeys "texto 1" & vbCrLf & "texto 2"
Saludos
Muy bueno, gracias. Pero como podría agregarle 1 Tabulador a un texto que genero para colocarlo en un correo electrónico?
ResponderEliminarHola,
Eliminarla tabulación podría ser con la contante: vbTab
"texto 1" & vbTab & "texto 2"
Saludos
Este comentario ha sido eliminado por el autor.
EliminarHola Ismael, cómo podría utilizar esta función para meter una contraseña y usuario a una página web? muchas gracias por la atención.
ResponderEliminarHola Josue,
Eliminarcreo que este post te dará las pistas que necesitas
http://excelforo.blogspot.com/2014/10/vba-rellenando-un-formulario-web-html.html
Saludos
Muchas gracias Ismael, si había encontrado ese método, el problema es que tenía que abrir Google Chrome, pero ya encontré la manera.
Eliminar;-)
Eliminarquizá puedas compartir tu solución con el resto de lectores
Saludos...
Hola, feliz noche!!
ResponderEliminarPor favor colabóreme con lo siguiente: necesito copiar seleccionar una tabla de un sitio web y cuando pase al formulario darle clik a un botón y que me pase esta tabla a una hoja de excel...¿quizás con onkey ó sendkey?...de antemano muchas gracias.
Hola Edison,
Eliminarquizá este otro post te resulte útil
https://excelforo.blogspot.com/2014/10/vba-rellenando-un-formulario-web-html.html
Saludos
Una pregunta amigo Como podria ejecutar ejemplo Ctrl+V en un caso que desee realizar funcion tipo paste en una hoja externa al excel
ResponderEliminarHola
Eliminarcomo se indica en el post la tecla control se replica con ^, así pues ctrl + v sería:= ^v
Saludos
Hola Ismael tengo el mismo problema con el Sendkey control v y necesito ingresar los datos en Oracle, pero no pega la información de la hoja de excel y sabía que sendkey no se permite en algunos programas es cierto esto??
EliminarHola Jonathan
Eliminares posible, ya que no todos los sistema trabajan bajo el mismo entorno....
En este caso desconozco si Oracle es uno de ellos... pero si has probado y no lo hace, ahí tienes tu respuesta
:'(
Saludos cordiales
Hola
ResponderEliminarSoy nuevo en el mundo de excel
Ando buscando un teclado virtual numérico para una pantalla táctil y que me introduca los datos en la celda que en ese momento este activa
De antemano les agradezco su ayuda
Buen día a todos.
ResponderEliminarEn mi oficina de contabilidad realizo una tarea bastante repetitiva: Tengo libros de excel con muchísimas hojas (aprox. 450)
Existen hojas en las cuales tengo informaciones (numéricas) que copio y pego en un programa de contabilidad, guardo el asiento, luego paso a la siguiente hoja y repito el proceso miles de veces.
¿Existe alguna forma de programar en VBA que excel haga eso por mi?
He intentado utilizar Sendkeys pero tengo dudas si realmente es el método correcto o se puede hacer de otra manera.
El comando que utilizo tan repetitivamente (como un robot) es más o menos el siguiente:
1º Ubico la celda que quiero copiar: luego Ctrl+c, Atl+Tab (para ir al software contable), Ctr+v, Enter, Alt+Tab, flecha abajo, ctrl+c, Alt+Tab, Ctrl+V, Enter, Alt+Tab, flecha abajo, Ctrl+C, Alt+Tab, Ctrl+V, Enter.... etc -------> F4 (guardar asiento)
2º Paso a la siguiente hoja y repito el proceso. Sería estupendo automatizar esta tarea, ya que mi sistema no me permite importar los datos de excel y como se imaginarán, me duele toda la mano de tanto CTRL+C, ALT+TAB, CTRL+V.
Muchísimas gracias de antemano.
Hola Francisco,
Eliminarcreo que algún tipo de conexión OLE (o similar), para llevar los datos del Excel a tu Sw, te facilitaría el trabajo mejor que replicar esos movimientos...
Ya que además en tu caso hay que interactuar no solo en Excel, si no fuera del entorno de nuestro libro de trabajo.
Saludos
Hola Ismael,
Eliminargracias por responder...
Me parece que no tendré forma de hacer esa conexión, imagino que necesitaré algún tipo de permiso del software (cosa que no tengo), por otro lado, no tengo idea cómo se hace esa conexión.
En verdad soy un neófito en VBA y aún así he logrado automatizar muchísimas tareas, lograr automatizar esta parte sería el punto culminante para mi labor.
¿Entonces crees que es inviable lo que quiero hacer?
Saludos
Imposible no hay nada... pero desde mi punto de vista, lo veo difícil
EliminarQuizá alguien más puede ofrecer alguna alternativa
:'(
Slds
Entiendo!!
EliminarSeguiré intentándolo más adelante, con calma.
Gracias!
Hola. Existen programas que automatizan estos procesos, tomando el control del teclado y del ratón y repitiendo las mismas tareas las veces que necesites. Algunos son muy completos e incluyen bucles y condiciones lógicas, que los hacen efectivos... Suerte!
EliminarHola. Necesito ayuda con la Macro SendKeys en Excel.
ResponderEliminarTengo una lista en Excel que quiero que me llene un formato PDF (que ya tengo) por cada una de las filas.
Osea, quisiera saber que escribo en la macro para que agarre los datos de la primera fila, los copie al formulario PDF, guarde el archivo con un número secuencia, luego copie los datos de la segunda fila, llene el formulario y guarde con el siguiente número secuencia, y así hasta todas las filas.
Muchas gracias.
Hola Arturo,
Eliminarno parece la cosa tan simple a priori...
Trataré de escribir un post al respecto
Saludos cordiales
Buenas Ismael,
ResponderEliminarMuy bueno tu foro, y muy productivo.
Tengo una duda. Necesito crear un ejecutable que ejecute una combinacion de letras ( sin necesidad de pulsarlas), unicamente lanzar esa apliacion y me pulse esas teclas.
Por ejemplo, un programa qye ejecute CTRL + ALT + 5.
¿Seria posible realizar esa operacion conel metodo de SENDKEYS?
Muchas gracias por tu ayuda, saludos
Hola
Eliminargracias por tu comentario...
Replicar esas tres teclas con sendkeys, sabiendo que:
CONTROL := ^ (signo exponencial)
ALT := % (signo de porcentaje)
en teoría sería algo así:
SendKeys "^%5", True
pero siempre asegúrate que tienes activa esas aplicación.
slds
Muchas gracias poor tu comentario
EliminarHola Ismael, antes que nada, muchísimas gracias por tu predisposición y por compartir tus conocimientos.
ResponderEliminarTengo en una macro la instrucción:
Application.SendKeys ("^HOME")
Pero cuando corro la macro desde la sheet, me escribe en la celda seleccionada OME. He probado con PGUP, y esribe PGUP... además me apaga el teclado númerico. Te agradeceré si tienes alguna solución para ello.
Hola, y perdona la demora...
Eliminarperdí tu comentario con el paso del tiempo.
Prueba con:
Application.SendKeys ("^{HOME}")
Saludos
Hola que tal? tengo una consulta respecto a "Evaluate" ya que supero los 255 caracterres y me arroja error, habra alguna alternativa para trasformar una string en valor??
ResponderEliminarGracias por tu tiempo!
Hola!
Eliminarsi tu formulación supera los 255 caracteres..(qué fórmula tienes!!), yo trataría de partirla en varias secciones que no superen ese límite.
Saludos cordiales