Tiempo atrás un usuario me preguntó cómo podría ejecutar una macro de manera automática cada vez que abriera una hoja de su Libro de Excel. Se trataba de transponer un listado de datos de una Hoja a una segunda cada vez que abrieramos esta última.
Realmente será válida para cualquier macro que queramos que se autoejecute al abrir una Hoja.
La clave de esta opción es la instrucción SUB Worksheet_activate () que emplearemos para crear nuestra macro.
Veámoslo con un ejemplo.
Tenemos el siguiente listado en la Hoja1 de nuestro Libro:
Para ejemplificar esta instrucción usaré una macro sencilla que transpone nuestro listado vertical en horizontal. Este código se deberá editar desde la Hoja2 (no desde algún módulo). Accederemos al Editor de VBA bien presionando Alt+F11, para luego en la ventana del Explorador de Proyectos buscar la 'Hoja2', o bien con el botón derecho del ratón sobre la pestaña de 'Hoja2' seleccionando la opción desplegada de Ver código.
Con esta instrucción lograremos nuestro objetivo, esto es, cada vez que abramos nuestra Hoja2 se transpondrá el listado de valores que se encuentre en la columna A de la 'Hoja1'
Realmente será válida para cualquier macro que queramos que se autoejecute al abrir una Hoja.
La clave de esta opción es la instrucción SUB Worksheet_activate () que emplearemos para crear nuestra macro.
Veámoslo con un ejemplo.
Tenemos el siguiente listado en la Hoja1 de nuestro Libro:
Para ejemplificar esta instrucción usaré una macro sencilla que transpone nuestro listado vertical en horizontal. Este código se deberá editar desde la Hoja2 (no desde algún módulo). Accederemos al Editor de VBA bien presionando Alt+F11, para luego en la ventana del Explorador de Proyectos buscar la 'Hoja2', o bien con el botón derecho del ratón sobre la pestaña de 'Hoja2' seleccionando la opción desplegada de Ver código.
'ejecuta macro al abrir Hoja Private Sub worksheet_activate() 'transpone listado en la columna A de la Hoja1 al abrir Hoja2 Dim y,f As Integer y = Cells(WORKSHEETS("Hoja1").Range("A" & Rows.Count).End(xlUp).Row, 1).Row For f = 1 To y WORKSHEETS("Hoja2").Cells(1, f).Value = WORKSHEETS("Hoja1").Cells(f, 1).Value Next f End Sub |
Con esta instrucción lograremos nuestro objetivo, esto es, cada vez que abramos nuestra Hoja2 se transpondrá el listado de valores que se encuentre en la columna A de la 'Hoja1'
Realmente no entiendo esto de los macros si me pudieras ayudar
ResponderEliminarEsto fue lo que el profesor me mando a hacer, pero realmente no lo entiendo
"Punto 1 Cree un macro con el nombre macro01, que:
Centralice y convine desde B15:K30 y que los datos escritos en estas celdas aparezcan en negrita, color azul, color de relleno amarillo y tamaño de la fuente en 16.5 ptos.
Nota: Agrege en este comentario como podemos crear un boton para ejecutar el macro previamente creado."
Ayudenme es mi examen para manana
Hola Rodolfo,
ResponderEliminarpara crear la macro llamada macro01 utiliza el asistente de generación de macros
Tienes un ejemplo en:
http://excelforo.blogspot.com/2009/08/ejemplo-creacion-macro.html
Se trata de que con el Asistente hagas lo que se te indica, lo que se quedará grabado en la macro, luego podrás asignar la macro a un botón.
Para el último punto puedes ver este post:
http://excelforo.blogspot.com/2009/09/boton-con-macro-en-excel-2007.html
Espero te sea de utilidad.
Slds
muchas gracias la verdad no encontraba la forma de hacer esta acción. muy buen post gracias.
ResponderEliminarSaludos quisiera una macro que cuando ingrese un dato y oulse el Enter que se ordene automaticamente. Asignandole a un botón lo puedo hacer pero necesito que solo con pulsar el enter se ejecute la macro. Gracias por vuestra ayuda
ResponderEliminarHola Anibal3,
ResponderEliminarbueno, neceistas incorporar tu macro dentro de un evento
Sub Worksheet_Change(ByVal Target As Range)
'[tu código]
End Sub
e incluir este código en la hoja donde se vaya a realizar la introducción de datos.
Slds cordiales
Hola Buenas Tardes.
ResponderEliminarTengo una Tabla Dinamica y luego de hacer doble click para detallar, necesito que esta nueva hoja creada con el detalle, no muestre ciertas columnas, ademas quiero darle formato a otra columna de numeros de manera que salga sin decimales y con la separacion de miles.
No se si hay alguna manera.
Se me ocurrio a traves de una macro como he leido en este y otros foros, pero no se hacerlo ni si es posible.
Muchas Gracias por la ayuda!
Saludos
Hola Francisco,
Eliminarno creo que sea configurable esa opción de 'Mostrar detalle' al hacer doble clic sobre un elemento de valor de una TD.
Lo que si podrías emplear para mostrar un cierto número de campos con los registros que verifiquen algunas condiciones es un filtro avanzado. Echa un vistazo a
http://excelforo.blogspot.com.es/2013/02/algo-mas-sobre-filtros-avanzados-en.html
así podrás controlar que campos mostrar... luego con una macro o selecionando el rango podrás cambiar el formato de las columnas.
Slds
Comprendo lo que dices, el problema es que necesito que esto se haga automaticamente, ya que la tabla dinamica y por consiguiente el "mostrar detalle" sera revisado por una persona ajena y me gustaria le saliera el detalle de la forma que requiero, sin dejar ver mayor detalle del que necesitan.
ResponderEliminarConoces alguna manera de ejecutar una macro automaticamente al crear este detalle en una hoja nueva?
Gracias!
Bueno Francisco,
Eliminarse podría aprovechar el hecho que al Mostrar detalle desde una Tabla dinámica se genera una Hoja nueva con una Tabla con los campos.
Con lo cual generar en el editr de VB en ThisWorkbook un código con un evento _NewSheet que al generar una hoja nueva, de la tabla generada al Mostrar Detalle elimine los campos que quieras.
Por ejemplo:
Private Sub Workbook_NewSheet(ByVal Sh As Object)
On Error Resume Next
Range("A1").ListObject.ListColumns(2).Delete
Resume
End Sub
Elimina el segundo campo de la Tabla generada...
Espero te pueda servir.
Slds
Hola
ResponderEliminarcomo haria para que excel me muestre solo el formulario hecho en VBA y no la hoja de calculo solo el formulario
Hola,
Eliminares algo raro lo que pides, podrías antes de mostrar el UserForm ocultar filas y columnas:
Private Sub Worksheet_Activate()
With Cells
.EntireColumn.Hidden = True
.EntireRow.Hidden = True
End With
UserForm1.Show
End Sub
o darles ancho y alto 0,:
Private Sub Worksheet_Activate()
With Cells
.ColumnWidth = 0
.RowHeight = 0
End With
UserForm1.Show
End Sub
Así no veras nada de la hoja, y sólo el formulario.
Recuerda en todo caso que el Editor de VBA, normalmente al final siempre vuelca sobre la hoja de cálculo de alguna manera.
Slds
buena noche quien me puede ayudar con un codigo de macro que haga lo siguiente
ResponderEliminar1 cuando abra el archivo me ejecute un modulo que diga usuario y cable para ingreso
2 que al momento del ingreso me guarde la fecha, nombre,hora de ingreso en un libro y que quede como historial
3 los usuarios serian como 12 que ingresaran
Hola,
Eliminarpodrías aplicar un evento Workbook_Open que abra un UserForm con controles ComboBox, uno que despliegue los 10 nombres de los usuarios y el otro el cable de ingreso.
Luego se podría asociar un botón más que tras Aceptar registre la hora y día del sistema y el nombre desplegado en el comboBox de usuarios..
Saludos
Es muy buena tu idea y suena fantástica pero la verda soy nuevo en esto y no se como hacerlo me gustaría que me ayudara creando el código en un libro de excel y me hicieras el grandísimo favor de enviarmelo a mi correo marcossalamanca1@hotmail.com te Dios te bendiga y te siga dando mucha sabiduría
EliminarHola Marcos,
Eliminarmejor lee primero las Normas de uso del blog, y si te interesa, envíame un correo a
excelforo@gmail.com
junto con las explicaciones oportunas, y si puede ser un fichero con las estructuras de datos y toda la información para poder desarrollar lo que requieres.
Un cordial saludo
Buena noche compañero ya te envié el archivo con una muestra a tu correo.
EliminarBuen dia Ismael ya te envié el archivo con una muestra a tu correo cordialmente marcos
Eliminarhola buenas noches aguien me podria ayudar con macros en un libro? tengo un libro con 12 hojas y la 13a la llame indice que al abrirlo me manda directamente ahi pero kiero tambien que al abrirlo me produzca una cancion en mp3 . de antemano muchas gracias .
ResponderEliminarHola Mauro,
Eliminaren próximas fechas subiré un post explicando la manera.
un saludo
muchas gracias por tu atenciòn estare al pendiente de tu post que tengas buen dia
Eliminarcomo puedo hacer que ejecute la macro una vez que termino de cargar la hoja ya que con el evento open marca error por que aun no termina de cargar la hoja
ResponderEliminarHola, buenos días, que tal estás?
EliminarUn gusto poder ayudarte.
No termino de entender a qué proceso te refieres con cargar la hoja.
Si con carga quieres indicar algún otro procedimiento Sub, bastaría que como última línea de esa Macro añadiera
Call 'tu macro'
Si, de otro lado, te refieres con carga a rellenar una plantilla en la hoja de cálculo, sería algo más complicado.. pero quizá un evento _Change con unos condicionales que verifiquen que todas las celdas están completas, y en ese caso, igual que antes:
Call 'tu macro'
Saludos cordiales
HOLA, QUISIERA UNA MACRO QUE ME PERMITA BUSCAR UNA HOJA CON NOMBRE ESPECIFICO, ESTE NOMBRE ESTARA EN UNA CELDA
ResponderEliminarHola, para seleccionar una hoja concreta puedes hacer:
EliminarSheets(range("A1").value).select
estando el nombre de la hoja en la celda A1
Saludos
ayudenme:
ResponderEliminarnecesito crear un acceso directo con el cual pueda acceder a un formulario excel de inicio de sesion.
gracias de antemano
Hola
Eliminarpara hacer operativo un UserForm puedes usar el método Show:
NombreFormulario.Show
No se si es lo que preguntas... no entendí muy bien
Saludos
Hola Ismael, me gustaría saber en esta fórmula de SI anidado =SI(C9=40,5;41,75;SI(C9=33,84;33,4;SI(C9=32,04;33,4;SI(C9=25,38;25,05;SI(C9=23,58;25,05;SI(C9=16,92;16,7;SI(C9=15,12;16,7;SI(C9=8,46;8,35;SI(C9=6,66;8,35))))))))) ¿cómo podría añadir una SUMA de celdas de otra Hoja del libro que a su vez son celdas formuladas igualmente?, no sé si me he explicado bien...
ResponderEliminarMuchas gracias!
Hola Lucia,
Eliminarlo primero que te diría es que cambies la forma de trabajar.
Construye una tabla auxiliar con las correspondencias, por ejemplo en la Hoja1 en el rango A1:B10
dato-cantidad
40,5 - 41,75
33,84 - 33,4
32,04 - 33,40
25,38 - 25,05
23,58 - 25,05
16,92 - 16,7
15,12 - 16,7
8,46 - 8,35
6,66 - 8,35
luego en lugar de escribir ese condiciona emplea:
=BUSCARV(C9;Hoja1!$A$1:$B$10;2;0)
Respecto a tu cuestión.. en qué supuesto o condición tienes que incluir esa suma???
Saludos