Problemas de actualización tabla excel a listbox

Quisiera ver si me pueden ayudar en este caso:

Al dar con el botón Guardar, ... No se actualiza automáticamente en el listbox indico el código siguiente para su pronta ayuda.

------------------------------------------------------------------------------------------------------------------------------------------

Option Explicit
'variables globales
Dim indice As Integer 'variable para crear un indice de lista
Private Sub btnactualizar_Click()
Dim hojadatos As Worksheet 'crear variable y define como hoja de trabajo
Dim tabla As ListObject ' crear variable y gestionar valores de la tabla
'definir variables temporales de las cajas dependiendo de las cajas de texto
Dim valor1 As String, valor2 As String
Set hojadatos = ThisWorkbook.Sheets("Clientes")
Set tabla = hojadatos.ListObjects("tclientes")
valor1 = cbovendedor.Value
valor2 = txtcliente.Value
'volver a escribir enla lista
With tabla.ListRow(indice + 1)
.Range(1) = valor1
.Range(2) = valor2
End With
'limpiar campos
limpiarcampos
End Sub

Private Sub btneliminar_Click()
Dim hojadatos As Worksheet 'crear variable y define como hoja de trabajo
Dim tabla As ListObject ' crear variable y gestionar valores de la tabla
'definir variables temporales de las cajas dependiendo de las cajas de texto
Set hojadatos = ThisWorkbook.Sheets("Clientes")
Set tabla = hojadatos.ListObjects("tclientes")
If MsgBox("Realmente desea eliminar el registro?", vbQuestion + vbYesNo + vbDefaultButton2, "ADVERTENCIA") = vbYes Then
tabla.ListRows(indice + 1).Delete
End If

'limpiamos los campos
limpiarcampos
End Sub

Private Sub btnguardar_Click()
' boton guardar
If (cbovendedor) = Empty Or (txtcliente) = Empty Then
MsgBox "Recuerda que tienes que ingresar cliente y vendedor", vbCritical
Else
Range("Clientes!A2").EntireRow.Insert
Range("Clientes!b2") = cbovendedor.Value
Range("Clientes!A2") = txtcliente.Value
'posicionar a la primera casilla
cbovendedor.SetFocus
MsgBox "Registro creado exitosamente"
End If
'limpiar casillas de formulario
limpiarcampos
End Sub
'dentro de lista dobleclick para poder cargar con 2 click a los cuadros los datos
Private Sub lstclientes_Click()
indice = Me.lstclientes.ListIndex
txtcliente.Value = lstclientes.List(indice, 0)
cbovendedor.Value = lstclientes.List(indice, 1)
End Sub
Private Sub UserForm_Initialize()
Cbovendedor. AddItem ("cliente1")
Cbovendedor. AddItem ("cliente2")
Cbovendedor. AddItem ("cliente3")
Cbovendedor. AddItem ("cliente4")
Cbovendedor. AddItem ("cliente5")
Cbovendedor. AddItem ("cliente6")
' cargar datos de tabla excel
Me.lstclientes.RowSource = "Clientes!TClientes" ' para poner elementos de una hoja hacia nuestro listbox ("Me." hace referencia a nuestra hoja1)en este caso la hoja tiene como nombre Hoja1
Me.lstclientes.ColumnCount = 2 ' para indicar el numero de columnas
Me.lstclientes.ColumnWidths = "400;60" ' para indicar el ancho de las columnas
Me.lstclientes.ColumnHeads = True ' para que tome los encabezados de la tabla excel
End Sub
Private Sub limpiarcampos()
cbovendedor = Empty
txtcliente = Empty
End Sub

2 respuestas

Respuesta
1

Solamente vuelve a cargar el listbox con esta línea:

lstclientes.RowSource = "Clientes!TClientes"

Quedaría así:

Private Sub btnguardar_Click()
  ' boton guardar
  If (cbovendedor) = Empty Or (txtcliente) = Empty Then
    MsgBox "Recuerda que tienes que ingresar cliente y vendedor", vbCritical
    Exit Sub
  Else
    Range("Clientes!A2").EntireRow.Insert
    Range("Clientes!b2") = cbovendedor.Value
    Range("Clientes!A2") = txtcliente.Value
    lstclientes.RowSource = "Clientes!TClientes"
    'posicionar a la primera casilla
    cbovendedor.SetFocus
    MsgBox "Registro creado exitosamente"
  End If
  'limpiar casillas de formulario
  Limpiarcampos
End Sub
Respuesta
1

Si solo carga los datos cuando se inicia, yo te recomendaría esto:

Private Sub btnguardar_Click()
' boton guardar
If (cbovendedor) = Empty Or (txtcliente) = Empty Then
MsgBox "Recuerda que tienes que ingresar cliente y vendedor", vbCritical
Else
Range("Clientes!A2").EntireRow.Insert
Range("Clientes!b2") = cbovendedor.Value
Range("Clientes!A2") = txtcliente.Value
'posicionar a la primera casilla
cbovendedor.SetFocus
MsgBox "Registro creado exitosamente"
End If
unload me
userform.show
End Sub

y eliminas el codigo para limpiar el formulario, recuerda que con las tablas cuando agreguas información en la siguiente fila automaticamente se agrega a la tabla la nueva información por lo que no es necesario agregarle campos, te quitaria mucho codigo de tu macro, revisalo.

Solo agrego la parte del unload me y user form.show??

Tu numero de formulario

userform1.show

Suponiendo que así se llama tu formulario, aunque Dante ya te dio otra respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas