Curso Excel VBA y Macros – Cap. 67 – Formularios – ListView – Pasar valores a hojas
<<CURSO COMPLETO DE MACROS EN YOUTUBE>>
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.
En este capítulo veremos el último ejemplo usando el Control ActiveX ListView, donde veremos la manera de pasar valores capturados en el ListView a una hoja. Este ejemplo se puede adecuar perfectamente a nuestro Formulario de Punto de Venta.
Ante de pasar los elementos del ListView vamos a poder dar de alta elementos uno a uno, modificación y baja de items.
Ver video Capítulo 67 Excel VBA & Macros
Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.
Alta de elementos
En el Formulario tenemos 3 controles TextBox que se habilitarán al momento de presionar el botón Nuevo. Al dar clic en Nuevo, se habilitan los textos, además de los botones Agregar y Guardar TODO. El botón Agregar permitirá añadir elementos al ListView, y el botón Guardar TODO pasará los valores de los Items a la hoja donde se encuentra el histórico de datos. Hay que considerar que se generará un ID por cada conjunto de Items.
Figura 1. Alta de registros en Formulario usando ListView.
Los valores se pasarán a la hoja de Datos donde veremos el ID por cada conjunto de elementos, una fecha y una fila por cada Item.
Figura 2. Hoja de Datos donde se guardan los valores capturados en el ListView.
Actualizar valores
Antes de pasar los valores a la hoja de Datos, podemos actualizar los elementos del ListView. Al elegir un elemento del ListView se habilitará el botón Actualizar, además de pasar los valores del elemento a los 3 TextBoxes de la parte superior.
Figura 3. Actualizar registros en Formulario usando Control ListView.
Eliminar registros
Al igual que Actualizar elementos del ListView, al elegir un elemento también se habilitará el botón Eliminar para quitar cualquier fila del ListView.
Código VBA del Formulario
Option Explicit 'EXCELeINFO 'MVP Sergio Alejandro Campos 'http://www.exceleinfo.com 'https://www.youtube.com/user/sergioacamposh 'http://blogs.itpro.es/exceleinfo Public vItem As Integer Private Sub btnActualizar_Click() Me.ListView1.ListItems.Item(vItem) = Me.TextBox2.Value Me.ListView1.ListItems.Item(vItem).SubItems(1) = Me.TextBox3.Value Me.ListView1.ListItems.Item(vItem).SubItems(2) = Me.TextBox4.Value End Sub Private Sub btnEliminar_Click() Me.ListView1.ListItems.Remove (vItem) If Me.ListView1.ListItems.Count = 0 Then Call DeshabilitarTextos Me.btnNuevo.Enabled = True Me.btnActualizar.Enabled = False Me.btnEliminar.Enabled = False Me.btnGuardar.Enabled = False End If End Sub Private Sub btnGuardar_Click() Dim Item As ListItem Set Item = Me.ListView1.ListItems.Add(Text:=Me.TextBox2.Value) Item.ListSubItems.Add Text:=Me.TextBox3.Value Item.ListSubItems.Add Text:=Me.TextBox4.Value Me.TextBox2.Value = "" Me.TextBox3.Value = "" Me.TextBox4.Value = "" Me.TextBox2.SetFocus End Sub Private Sub btnGuardarTodo_Click() Dim i As Integer Dim Rango As Range Dim NuevaFila As Integer If Me.ListView1.ListItems.Count = 0 Then MsgBox "No hay registros": Exit Sub With Sheets("Hoja1") For i = 1 To Me.ListView1.ListItems.Count Set Rango = Sheets("Hoja1").Range("A1").CurrentRegion NuevaFila = Rango.Rows.Count + 1 .Cells(NuevaFila, 1).Value = Me.TextBox1.Value 'ID .Cells(NuevaFila, 2).Value = Date 'Fecha .Cells(NuevaFila, 3).Value = Me.ListView1.ListItems.Item(i) .Cells(NuevaFila, 4).Value = Me.ListView1.ListItems.Item(i).SubItems(1) .Cells(NuevaFila, 5).Value = Me.ListView1.ListItems.Item(i).SubItems(2) Next i End With MsgBox "Registros dados de alta correctamente.", vbInformation, "EXCELeINFO" Unload Me End Sub Private Sub btnNuevo_Click() Dim Rango As Range Dim NuevaFila As Integer Dim NuevoId As Integer Call HabilitarTextos Me.btnNuevo.Enabled = False Me.btnGuardar.Enabled = True Me.btnGuardarTodo.Enabled = True '''' 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 Private Sub ListView1_Click() Call HabilitarTextos Call PasarATextBox vItem = Me.ListView1.SelectedItem.Index Me.btnActualizar.Enabled = True Me.btnEliminar.Enabled = True Me.btnGuardar.Enabled = False End Sub Sub PasarATextBox() With Me.ListView1 Me.TextBox2.Value = .SelectedItem Me.TextBox3.Value = .SelectedItem.SubItems(1) Me.TextBox4.Value = .SelectedItem.SubItems(2) End With End Sub Private Sub UserForm_Initialize() With Me.ListView1 .Gridlines = True .View = lvwReport .FullRowSelect = True End With Call DeshabilitarTextos With Me.ListView1.ColumnHeaders .Add Text:="VENDEDOR", Width:=90 .Add Text:="SUCURSAL", Width:=90 .Add Text:="PRODUCTO", Width:=90 End With Me.btnGuardar.Enabled = False Me.btnActualizar.Enabled = False Me.btnEliminar.Enabled = False 'Me.btnGuardarTodo.Enabled = False 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 = "" Me.TextBox2.SetFocus End Sub Sub DeshabilitarTextos() 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) Me.btnGuardarTodo.Enabled = False End Sub
Descarga el archivo de ejemplo
067 – Forrmularios Control ListView PARTE 5 – EXCELeINFO.zip
Íconos para usar en botones.zip
<<CURSO COMPLETO DE MACROS EN YOUTUBE>>
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.