y nuestro objetivo es rellenar cada rango vacío con el nombre del departamento de cada grupo, solo tendremos que hacer Doble Clic en cada marcador, como se observa en la siguiente imagen:
Ejemplos, trucos y soluciones en Excel. Con el uso de sus herramientas y funciones y/o con programación Vba.
y nuestro objetivo es rellenar cada rango vacío con el nombre del departamento de cada grupo, solo tendremos que hacer Doble Clic en cada marcador, como se observa en la siguiente imagen:
Sub Listadesplegable1_Cambiar()
End Sub
Sub Listadesplegable1_Cambiar()
If [E3] = "" Then Exit Sub
On Error Resume Next
dato = Range("M" & Range("E3"))
Application.Run (dato)
End Sub
Private Sub ComboBox1_Change()
On Error Resume Next
If ComboBox1 <> "" Then
Application.Run ComboBox1.Value
End If
End Sub
4 - Para que el resto de la tabla no muestre los campos separados entre título o criterio y su registro, vamos a 'contraer' toda la tabla. Seleccionamos desde el primer grupo (Abrazaderas) hasta el último campo de la tabla. Clic derecho, opción Expandir o contraer, Contraer todo el campo.
5 - A continuación, desde el signo + de cada grupo desplegaremos los detalles de este modo:
La macro se encuentra en el libro Ventas. Desde el libro Pedido se trae información a éste libro activo y también al libro de Taller. Como segundo paso también moveremos datos entre diferentes hojas del libro Ventas.
Private Sub UserForm_Initialize()
For Each ct In Range("Conceptos") 'nombre del rango entre comillas
ComboBox6.AddItem ct.Text
Next ct
'el resto de las instrucciones para este evento
Private Sub ComboBox6_AfterUpdate()
If ComboBox6 = "" Then
ComboBox7.RowSource = "":
ComboBox7.Clear
Else
ComboBox7.RowSource
= "=" & Trim(ComboBox6.Text)
End If
End Sub
Sub llamaUF()
Range("B4").Select
'se quita el posible autofiltro, mostrando la tabla completa.
If ActiveSheet.FilterMode = True Then
ActiveSheet.ShowAllData
UserForm1.Show
End Sub
El formulario de registro, además de los controles necesarios para esa tarea, contará con un control Image (para mostrar la imagen del rango filtrado) y un control ComboBox desde donde seleccionaremos el criterio a filtrar.
Al abrir el Userform, en el evento Initialize ejecutaremos unas instrucciones para obtener la lista de criterios sin duplicados y ordenada. En este ejemplo se trata de la columna C (segunda columna de la Tabla de datos).
Private Sub UserForm_Initialize()
'armar lista única de la col c
Call ListaValoresUnicos
'rellenar el combobox
For i = 5 To Range("M" &
Rows.Count).End(xlUp).Row
ComboBox1.AddItem Range("M" & i)
Next i
End Sub
Sub ListaValoresUnicos() 'para la hoja Lista1 con la Tabla4
'se pasa la col C a un rango auxiliar y se le quitan
los duplicados
Range("Tabla4[[CALIBRE]]").Copy
Destination:=[M5]
ActiveSheet.Range("$M$5:$M$" & Range("M" & Rows.Count).End(xlUp).Row).RemoveDuplicates Columns:=1, Header:=xlNo
'se ordena el rango auxiliar para presentarlo en el
desplegable
ActiveWorkbook.Worksheets("Lista1").Sort.SortFields.Clear
x = Range("M" &
Rows.Count).End(xlUp).Row
ActiveWorkbook.Worksheets("Lista1").Range("M5:M"
& x).Sort _
Key1:=Range("M5:M" & x), Order1:=xlAscending,
Header:=xlGuess
End Sub
En el evento Click del ComboBox ejecutaremos la macro principal, la de la Creación y Exportación de la imagen. Se filtrará la hoja por el criterio seleccionado, se tomará una captura o imagen del rango obtenido y la guardará como archivo de imagen 'jpg' en una subcarpeta (en el mismo directorio que el libro activo). A continuación se establece la propiedad Picture del control Image con la ruta y nombre del archivo de imagen guardado.
Private Sub ComboBox1_Click()
If ComboBox1.Value = "" Then Exit Sub
'se filtra la col C de la hoja activa
ActiveSheet.ListObjects(1).Range.AutoFilter Field:=2, Criteria1:=ComboBox1.Text
'se exporta el rango como imagen
Call exportaImagen(ComboBox1.Text, ActiveSheet.Name)
'se indica la misma ruta y nombre de archivo que se usaron en la macro de exportación
ruta = ThisWorkbook.Path & "/IMG/"
archi = ComboBox1.Text & ".jpg" 'no se permite png
'se sube la imagen al control Image1
With Image1
.Picture =
LoadPicture(ruta & archi)
.PictureSizeMode = fmPictureSizeModeClip 'ver *
.PictureAlignment = fmPictureAlignmentTopLeft
End With
End Sub
* Las propiedades de ubicación pueden ser establecidas desde el modo diseño
La macro exportaImagen se encuentra en la entrada del tema anterior.
También se puede descargar libro desde aquí o solicitarlo a mi correo de Gmail.
Acceso al VIDEO Nº 82 desde aquí.
Utilizamos la Grabadora de macros para obtener instrucciones que no recordamos o desconocemos al intentar realizar alguna tarea repetitiva. Luego mediante VBA podemos ajustar y completar ese código obtenido.
Pueden seguir el paso a paso para grabar una macro en Word, y luego asignarle un atajo de teclado, desde el VIDEO Nº 80 de mi canal... o pueden continuar la lectura aquí.
Viendo las dificultades que presenta en Word la segunda tarea, o sea asignar el atajo de teclado, lo que hacemos es grabar una segunda macro para ejecutar la primera.
Y aquí utilizaremos al instrucción: Application.Run que ya hemos visto en la entrada del VIDEO Nº 75.
Entonces, primero grabaremos la macro que necesitamos ejecutar en un documento Word de manera repetitiva. En el ejemplo solo ingresamos unos títulos y le damos formato a algunas líneas de texto.
Para llamar a la grabadora podemos optar por el botón que se encuentra en la barra de estado (al pie de la ventana, al igual que en Excel) o desde el menú Vista, Macros, Grabar Macro.
En la ventana que se nos presenta ingresamos un nombre para la macro, seleccionamos dónde se ubicará (en el libro activo o en la Plantilla Normal si la vamos a utilizar en otros libros) y colocamos alguna descripción del contenido de la macro.

Al presionar el botón ‘Teclado’ se nos abrirá la siguiente ventana, donde vamos a controlar que tengamos seleccionado el proyecto o la plantilla Normal según sea nuestra decisión.
En el recuadro no escribiremos nada sino que allí presionaremos la combinación de teclas que hemos seleccionado. En mi caso: CTRL y la tecla W.
Recién entonces se nos mostrarán esas teclas en el recuadro. Presionamos ‘Asignar’ para que se vuelque en el recuadro ‘Teclas Activas’.
NOTA: si elegimos alguna tecla que es de uso de la aplicación se nos mostrará la combinación CTRL+Mayúsc+la letra. Y así tendrá que ser ejecutado este atajo.
Al aceptar ya tendremos la grabadora activada y comenzaremos a realizar todos los pasos que queremos automatizar.
Al detener la grabadora encontraremos en un módulo el código generado. A partir de allí tendremos que pulir un poco y ajustar seguramente algunas referencias.
Pero es muy posible que la macro no grabe todos los pasos…. Solo nos servirá para conocer la sintaxis de algunas instrucciones, pero nada más.
Entonces, ¿cómo podemos asignar un atajo de teclado a una macro ya guardada? Vamos a recurrir a la siguiente solución.
Ya tendremos en un módulo del Editor una macro guardada, un código completo para toda nuestra tarea. Teniendo la precaución de colocar como una primera instrucción, un mensaje de confirmación… ya veremos el porqué (*).
A continuación grabaremos una nueva macro tal como en los pasos anteriores, asignándole un atajo de teclado. Y la tarea que vamos a grabar será ejecutar esta macro (rangos_excel_word).
(*) Y ahora, cuando se ejecute, la primera instrucción que encuentra es la de confirmación, lo que nos permite ‘Cancelar’ el proceso ‘rangos_excel_word’ y detener nuestra macro de grabación.
Entonces en un módulo encontraremos la instrucción de llamada (la única línea que nos interesa recuperar, el resto lo borramos).
Esta será la macro que ejecutaremos con atajo de teclado llamando a la del proceso principal.
Es recomendable colocar en el mismo código el atajo de teclado.
Acceso al VIDEO Nº 80 desde aquí.