Curso Excel VBA y Macros – Cap. 64 – Formularios – Parte 2 Control ListView – Agregar registros
Con este video tutorial veremos una serie de videos dedicados al Control ListView, el cual es un Control muy flexible que viene a reemplazar de cierta manera al Control ListBox, ya que tiene más opciones a personalizar. Veremos en esta serie:
-
Configurar y activar el Control ActiveX ListView y hacer nuestra primera cara de valores.
-
Agregar registros.
-
Actualizar registros.
-
Baja de registros.
Ver video Capítulo 64 Excel VBA & Macros
Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.
Agregar botones de Nuevo y Guardar
En la parte 1 de este proyecto vimos como desarrollar un formulario donde insertamos el control ListView para cargar valores desde un rango de celdas de Excel. En esta parte del proyecto insertaremos nuevos controles al Formulario para poder agregar registros. Añadiremos los siguientes controles ActiveX:
-
3 TextBox.
-
1 Frame.
-
2 Botones.
Figura 1. Formulario de alta de registros.
Añadir imágenes a botones
En el IDE de VBA elegimos los botones Nuevo y Guardar. En la ventana de Propiedades elegimos la propiedad Picture. Elegimos la imagen que deseemos insertar y luego en la propiedad PicturePosition elegimos fmPicturePositionLeftCenter.
Deshabilitar los Cuadros de texto
Al iniciar el formulario vamos a deshabilitar los TextBoxes, además de asignarles el color gris para que puedan ser modificados.
Option Explicit 'EXCELeINFO 'MVP Sergio Alejandro Campos 'http://www.exceleinfo.com 'https://www.youtube.com/user/sergioacamposh 'http://blogs.itpro.es/exceleinfo Private Sub UserForm_Initialize() Me.ListView1.ColumnHeaders.Clear Me.ListView1.ListItems.Clear Me.TextBox1.Enabled = False Me.TextBox1.BackColor = VBA.RGB(242, 242, 242) Me.TextBox2.Enabled = False Me.TextBox2.BackColor = VBA.RGB(242, 242, 242) Me.TextBox3.Enabled = False Me.TextBox3.BackColor = VBA.RGB(242, 242, 242) Me.TextBox4.Enabled = False Me.TextBox4.BackColor = VBA.RGB(242, 242, 242) With Me.ListView1 .Gridlines = True .HideColumnHeaders = False .View = lvwReport .FullRowSelect = True .Appearance = ccFlat .CheckBoxes = True .MultiSelect = True End With Call CargarValoresListView End Sub Sub CargarValoresListView() Dim Rango As Range Dim Celda As Range Dim Item As ListItem Dim Filas As Long Dim Columnas As Long Dim i As Long Dim j As Long Set Rango = Sheets("Hoja1").Range("A1").CurrentRegion Filas = Rango.Rows.Count Columnas = Rango.Columns.Count With Me.ListView1 .ColumnHeaders.Add Text:="ID", Width:=50 .ColumnHeaders.Add Text:="VENDEDOR" .ColumnHeaders.Add Text:="SUCURSAL" .ColumnHeaders.Add Text:="PRODUCTO" End With For i = 2 To Filas Set Item = Me.ListView1.ListItems.Add(Text:=Rango(i, 1).Value) For j = 2 To Columnas Item.ListSubItems.Add Text:=Rango(i, j).Value Next j Next i Me.Label1.Caption = "Registros: " & Me.ListView1.ListItems.Count End Sub
Botón Nuevo registro
Al momento de presionar el botón Nuevo habilitaremos los Cuadros de texto, además de reconocer el último ID registrado para asignar un nuevo ID.
Figura 2. Agregar registros a Formulario usando botón Nuevo.
'NUEVO Private Sub CommandButton1_Click() Dim Rango As Range Dim NuevaFila As Long Dim NuevoId As Long Call HabilitarTextos Me.TextBox2.SetFocus Set Rango = Sheets("Hoja1").Range("A1").CurrentRegion NuevaFila = Rango.Rows.Count NuevoId = Sheets("Hoja1").Cells(NuevaFila, 1) + 1 Me.TextBox1.Value = NuevoId End Sub Sub HabilitarTextos() Me.TextBox1.BackColor = VBA.vbWhite Me.TextBox2.Enabled = True Me.TextBox2.BackColor = VBA.vbWhite Me.TextBox2.Value = "" Me.TextBox3.Enabled = True Me.TextBox3.BackColor = VBA.vbWhite Me.TextBox3.Value = "" Me.TextBox4.Enabled = True Me.TextBox4.BackColor = VBA.vbWhite Me.TextBox4.Value = "" End Sub
Botón Guardar registro
Al dar clic en el botón Guardar se agregarán los valores ingresados en los TextBoxes en la siguiente línea vacía de nuestro rango y mandamos llamar al evento Initialize del Formulario para cargar de nuevo los valores del rango.
'GUARDAR Private Sub CommandButton2_Click() Dim Rango As Range Dim NuevaFila As Long Set Rango = Sheets("Hoja1").Range("A1").CurrentRegion NuevaFila = Rango.Rows.Count + 1 With Sheets("Hoja1") .Cells(NuevaFila, 1).Value = Me.TextBox1.Value .Cells(NuevaFila, 2).Value = Me.TextBox2.Value .Cells(NuevaFila, 3).Value = Me.TextBox3.Value .Cells(NuevaFila, 4).Value = Me.TextBox4.Value End With Call UserForm_Initialize End Sub
Descarga el archivo de ejemplo
064 – Forrmularios Control ListView PARTE 2 – EXCELeINFO.zip
Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.