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.

