Curso Excel VBA y Macros – Cap. 64 – Formularios – Parte 2 Control ListView – Agregar registros

<<CURSO COMPLETO 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. 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

<<CURSO COMPLETO 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...