Problemas al actualizar datos en listbox

Noches/Días

Quisiera ver si me pueden ayudar en este caso:

1.- Registra normal los datos con el botón Guardar, pero... No se actualiza automáticamente en el listbox es lo que no entiendo si el código esta bien.

2.- En el botón editar me sale un problema en la linea.

With tabla.ListRow(indice + 1)

Se ha producido el error '438' en tiempo de ejecución:

El objeto no admite esta propiedad o método.

Y no puedo actualizar nada.

El botón de eliminar esta todo excelente.

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

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

Agradezco de antemano su pronta ayuda. Y bueno si tienen alguna plantilla del CRUD para poder emplearlo. Ya que veo que siempre es utilizado.

1 respuesta

Respuesta
1

Según tu código:

    Range("Clientes!b2") = cbovendedor.Value
    Range("Clientes!A2") = txtcliente.Value

El cliente va en la columna "A" y el vendedor en la columna "B", entonces:

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")
  'volver a escribir enla lista
  valor1 = txtcliente.Value
  valor2 = cbovendedor.Value
  tabla.DataBodyRange(indice + 1, 1) = valor1
  tabla.DataBodyRange(indice + 1, 2) = valor2
  'limpiar campos
  limpiarcampos
End Sub


[No olvides valorar.

Gracias Dante, voy a probar el código nuevamente cuando llegue a casa. Y te respondo.

Dante, tengo el tema de que en el botón de agregar, me funciona normal al registrar, pero no actualiza el listbox al momento. Sino que tengo que cerrar y volver a abrir el formulario.

¿Qué podría estar haciendo mal?

En el botón editar me sale un problema en la linea

La respuesta es para el botón editar.

Valora esta respuesta y crea una nueva para revisar el botón "guardar".

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas