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.

Alta de registros en Formulario usando ListView.

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.

Hoja de Datos donde se guardan los valores capturados en el ListView.

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.

Actualizar registros en Formulario usando Control ListView.

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.

You may also like...

Leave a Reply

Your email address will not be published.

%d bloggers like this: