Modificar datos de una tabla con un ListBox en Excel

Este tema ya lo venía pensando a raíz de varias consultas en el Blog, y bueno, me di a la tarea de preparar un ejemplo sencillo, pero que puede servir de base para proyectos más ambiciosos.

El ejemplo tiene una tabla la cual se mostrará en un ListBox que está en un formulario. Para efecto de modificar los datos de cada registro, basta con elegir uno de ellos y presionar el botón Modificar y lanzará otro formulario donde se podrán actualizar los datos.

Al igual también cuenta con un botón de Eliminar para eliminar la fila donde está el registro,

Imagen del formulario

image

Código del formulario para mostrar datos

'Cerrar formulario
Private Sub CommandButton2_Click()
Unload Me
End Sub
'
'Abrir el formulario para modificar
Private Sub CommandButton3_Click()
If Me.ListBox1.ListIndex < 0 Then
    MsgBox "No se ha elegido ningún registro", vbExclamation, "EXCELeINFO"
Else
Modificar.Show
End If
End Sub
'
'Eliminar el registro
Private Sub CommandButton4_Click()
Pregunta = MsgBox("Está seguro de eliminar el registro?", vbYesNo + vbQuestion, "EXCELeINFO")
If Pregunta <> vbNo Then
    Fila = Me.ListBox1.ListIndex + 2
    Rows(Fila).Delete
Application.ScreenUpdating = True
End If
End Sub
'
'Activar la celda del registro elegido
Private Sub ListBox1_Click()
Fila = Me.ListBox1.ListIndex + 2
For i = 1 To 4
    Cells(Fila, 1).Activate
Next i
End Sub
'Dar formato al ListBox y traer datos de la tabla
Private Sub UserForm_Initialize()
With ListBox1
    .ColumnCount = 4
    .ColumnWidths = "60 pt;60 pt;70 pt"
    .ColumnHeads = True
End With
ListBox1.RowSource = "Tabla1"
End Sub

Código del formulario para modificar

'Actualizar el registro
Private Sub CommandButton1_Click()
For i = 1 To 4
    ActiveCell.Offset(0, i - 1).Value = Me.Controls("TextBox" & i).Value
Next i
Unload Me
End Sub
'
'Cerrar formulario
Private Sub CommandButton2_Click()
Unload Me
End Sub
'
'Llenar los cuadro de texto con los datos del registro elegido
Private Sub UserForm_Initialize()
For i = 1 To 4
    Me.Controls("TextBox" & i).Value = ActiveCell.Offset(0, i - 1).Value
Next i
End Sub

:: Descargar el ejemplo

You may also like...

60 Responses

  1. JORGE PALACIOS says:

    Muchas gracias por el ejemplo, quiero preguntarte cosas.

    no entiendo por que si copio el código, primero me sale error que no encuentra el formulario donde voy a modificar los datos.

    segundo no se como hacer para que me quede como el ejemplo, de que me cargue los datos si selecciono varias veces diferentes registros, no al tiempo sino si doy click en uno y después miro otro para que me actualice los datos que son. en el formulario de modificación me quedan los datos de la primer consulta

    y tercero al activar la etiqueta ColumnHeads me sale los subtitulos pero de las celdas a,b,c,d,e.

    te agradezco la ayuda.

    Código del formulario para mostrar datos


    ‘Abrir el formulario para modificar
    Private Sub cmdAceptar_Click()
    If Me.ListBox2.ListIndex < 0 Then
    MsgBox "No se ha elegido ningún registro", vbExclamation, "EXCELeINFO"
    Else

    FRMMODIFICARPRODUCTO2.Show

    End If

    End Sub

    Private Sub cmdCancelar_Click()

    FRMMODIFICARPRODUCTO.Hide

    End Sub

    '
    'Eliminar el registro
    Private Sub CommandButton1_Click()
    Pregunta = MsgBox("Está seguro de eliminar el registro?", vbYesNo + vbQuestion, "EXCELeINFO")
    If Pregunta vbNo Then
    Fila = Me.ListBox2.ListIndex + 1
    Rows(Fila).Delete
    Application.ScreenUpdating = True
    End If

    End Sub


    ‘Activar la celda del registro elegido
    Private Sub ListBox2_Click()
    Fila = Me.ListBox2.ListIndex + 1
    For i = 1 To 7
    Cells(Fila, 1).Activate
    Next i

    End Sub

    Private Sub UserForm_Initialize()

    Sheets(“PRODUCTOS”).Select
    ListBox2.ColumnCount = 7
    ListBox2.ColumnWidths = “300 pt;100 pt;200 pt;150 pt;80 pt;100 pt;100 pt”
    ListBox2.ColumnHeads = True
    ListBox2.RowSource = “A1:G6000”

    End Sub

    Código del formulario para modificar

    ‘Actualizar el registro
    Private Sub cmdcrearproducto_Click()
    For i = 1 To 7
    ActiveCell.Offset(0, i – 1).Value = Me.Controls(“TextBox” & i).Value
    Next i

    FRMMODIFICARPRODUCTO2.Hide
    FRMMODIFICARPRODUCTO.Hide
    FRMPRODUCTOS.Hide

    ActiveWorkbook.Save

    End Sub

    Private Sub CommandButton2_Click()

    FRMMODIFICARPRODUCTO2.Hide

    End Sub


    ‘Llenar los cuadro de texto con los datos del registro elegido
    Private Sub UserForm_Initialize()
    For i = 1 To 7
    Me.Controls(“TextBox” & i).Value = ActiveCell.Offset(0, i – 1).Value
    Next i

    End Sub

  2. JORGE PALACIOS says:

    Si claro, el código que envió esta adaptado al que estoy haciendo. por eso las preguntas. tambien te lo envie completo al correo.

  3. JORGE PALACIOS says:

    ya lo adapte. lo unico que no me funciona es que al seleccionar otra fila para modificarla me salen los datos de la primera que habia seleccionado.
    lo de la etiqueta tampoco me cuadra.

    pero lo que realmente es que me actualice los datos al cambiar de fila seleccionada en el formulario de modificar.

  4. Alfredo Bravo says:

    Hola Sergio, excelente trabajo. Pero tengo una pregunta, tal vez seria bueno que pudieras agregar un boton al pie del form. para “agregar” nuevas filas. Si la agrego “a mano” en la tabla principal, luego el boton “abrir lista” no se actualiza… o es que no he leido bien o se me paso algo?.
    Bueno es un gran ejemplo que pienso usar en una planilla que contiene a la fecha unos 600 registros de empleados con muchos datos. Como debo ir agregando – y quitando gente- de ahi la consulta que te hago.

    Sigue asi!. 🙂

    • Te comento que los ejemplos son precisamente para motivar a las personas a integrar sus propios desarrollos e ir aprendiendo. Estos ejemplos son tal cual, por lo que te invitaría a seguir buscando el en blog; seguramente en el ejemplo que publiqué aquí http://exceleinfo.wordpress.com/2011/07/05/ejemplo-de-formulario-de-captura-en-excel/ podrás encontrar las preguntas que buscas.

      Con respecto al ejemplo en cuestión, la línea que dice ListBox1.RowSource = “Tabla1” carga sólo los datos del rango llamado llamado “Tabla1”. En este caso será cuestión de reemplazarlo por el rango que desees.

  5. JORGE PALACIOS says:

    Buenas Tardes, yo copie el codigo y lo adapte a un programa que estoy haciendo. me ha ido muy bien es cuestion de asociar y adaptarse. me podrias ayudar es que cuando consulto varias filas en el formulario de modificar me quedan los datos de la primer consulta , me gustaria que lo hiciera como en el ejemplo, consultas una fila y te salen los datos de la consulta si consulto otra fila cambia y actualiza…. aunque copie el codigo tal cual no me lo hace como en el ejemplo de antemano te agradezco sergio x la ayuda y la asesoria…

  6. JORGE PALACIOS says:

    Cuál es el código que tienes en el formulario? tanto para cargar los datos de la tabla, como para hacer la modificación del registro ?

    Para cargar los datos de la tabla tengo :

    Private Sub UserForm_Initialize()

    Sheets(“PRODUCTOS”).Select
    ListBox2.ColumnCount = 7
    ListBox2.ColumnWidths = “300 pt;100 pt;200 pt;150 pt;80 pt;100 pt”
    ListBox2.RowSource = “B1:G6000”

    End Sub

    y para modificar el registro tengo

    ‘Abrir el formulario para modificar
    Private Sub cmdAceptar_Click()
    If Me.ListBox2.ListIndex < 0 Then
    MsgBox "No se ha elegido ningún registro", vbExclamation, "EXCELeINFO"
    Else

    FRMMODIFICARPRODUCTO2.Show

    End If

    End Sub

    '
    'Activar la celda del registro elegido
    Private Sub ListBox2_Click()
    Fila = Me.ListBox2.ListIndex + 1
    For i = 1 To 7
    Cells(Fila, 1).Activate
    Next i

    End Sub

    'Actualizar el registro
    Private Sub cmdcrearproducto_Click()
    For i = 1 To 7
    ActiveCell.Offset(0, i – 1).Value = Me.Controls("TextBox" & i).Value
    Next i

    FRMMODIFICARPRODUCTO2.Hide
    FRMMODIFICARPRODUCTO.Hide
    FRMPRODUCTOS.Hide

    ActiveWorkbook.Save

    End Sub

    esos son los datos que me estas pidiendo

    • La cuestión está en que estás utilizando HIDE para cerrar el formulario, pero lo que haces es OCULTARLO, y cuando lo vuelves a llamar te muestra la misma información.

      Mejor utiliza la línea

      Unload FRMMODIFICARPRODUCTO2

      Y así con todos lo formularios

      O también usa

      Unload Me

      Para cerrar el formulario activo

  7. JORGE PALACIOS says:

    que bien muchas gracias. que buen apoyo….

  8. JORGE PALACIOS says:

    sergio me dices que Unload me guarda los cambios al cerrar el formulario?

  9. JORGE PALACIOS says:

    tenia una plantilla funcionando en la cual ya me traia las formulas para calcular el iva y demas.
    lo que pasa es que lo que van a facturar no todos los elementos llevan iva por que son medicamentos.
    se me ocurrio agregar dos listbox mas (iva y calculoiva)
    agregue una formula que es precio * cantidad * iva
    como unos van en 0.16 y otros en cero
    todos pasan a calculoiva le saco el subtotal a estey lo envio a iva
    pero me salen errores

    si ingreso primero un producto que lleve iva no sale error, y me deja cargar mas productos lleven o no iva.

    pero si el primer producto que ingreso en la factura no lleva iva
    me sale

    error 9
    subindice fuera de intervalo

    si lo depuro me envia a

    FRMFACTURA.sumarValorTotal

    FORMULARIO AGREGAR PRODUCTO

    Private Sub cmdAgregar_Click()

    If Trim(Me.txtCantidad.Text) = “” Then MsgBox (“Debes ingresar la cantidad!!”): Exit Sub
    If Me.txtPrecio.Text = “” Then MsgBox (“Debes elegir un producto!!”): Exit Sub

    With FRMFACTURA
    .lstCantidad.AddItem (Me.txtCantidad.Text)
    .lstDescripcion.AddItem (Me.cmbProducto.Text)
    .lstValorUnitario.AddItem (Me.txtPrecio.Text)
    .lstValorTotal.AddItem (Str(Val(Me.txtCantidad.Text) * Val(Me.txtPrecio.Text)))
    .lstIva.AddItem (Me.txtIva.Text)
    .lstCalculoIva.AddItem (Str(Val(Me.txtCantidad.Text) * Val(Me.txtPrecio.Text * Val(Me.txtIva.Text)))) ‘AQUI DEBERIA IR LA FORMULA PARA EL IVA

    Cuenta = .lstCantidad.ListCount
    If Cuenta >= 14 Then MsgBox (“Tienes ya el maximo de (14) productos por factura”): Exit Sub

    End With
    FRMFACTURA.sumarValorTotal
    Me.txtPrecio.Text = “”
    Me.txtIva.Text = “”
    Me.txtCantidad.Text = “”
    Me.cmbProducto.ListIndex = -1
    Me.cmbProducto.SetFocus

    End Sub

    FORMULARIO FACTURA

    Public Sub sumarValorTotal() ‘ suma solo la ultima lista, osea, Valor Total
    Dim i As Integer
    Dim j As Integer
    Dim dTotal As Double
    Dim dTotalIva As Double

    dTotal = 0
    For i = 0 To Me.lstValorTotal.ListCount – 1
    dTotal = dTotal + Val(Me.lstValorTotal.List(i))

    dTotalIva = 0
    For j = 0 To Me.lstCalculoIva.ListCount – 1
    dTotalIva = dTotalIva + Val(Me.lstCalculoIva.List(j))

    Next
    Me.txtSubtotal.Text = dTotal
    Next
    Me.txtCalculoIva.Text = dTotalIva

    If dTotal > 0 Then ‘ aqui se hacen los calculos para el subtotal, iva y total
    If dTotalIva > 0 Then

    Me.txtIva.Text = Val(Me.txtCalculoIva.Text)
    Me.txtTotal.Text = Val(Me.txtSubtotal.Text) + Val(Me.txtFlete.Text) + Val(Me.txtIva.Text)

    End If
    End If

    arrTotal = Split(Me.txtTotal.Text, “.”)
    If UBound(arrTotal) = 0 Then
    Me.txtLetras.Text = “SON: ” & Num2Text(arrTotal(0)) & ” PESOS”
    Else
    Me.txtLetras.Text = “SON: ” & Num2Text(arrTotal(0)) & ” CON ” & arrTotal(1) & “PESOS”
    End If

    End Sub

  10. Ramon Falette says:

    tengo problemas para crear crear un autonumerico. me explico. tengo un formulario con un textbox llamdo txtnofactura, en el cual quiero llevar el conteo de facturas realizadas y las mismas se me guarden en una base de datos que es una hoja de excel. el problema es que cuando logro hacer el autonumerico y sierro el formulario me empieza a contar desde el numero que le asipne no en el ultimo numero generado. por favor si pueden ayudarme se los agradecere.

  11. Ramon Falette says:

    me podrias decir la secuencia de codigo. ya que tengo 5 dias en estoy y estoy bloqueado.
    solo me falta esto para poner a funcional esto

    • El punto solo es aumentar en 1 el dato que tengas en la celda elegida, por ejemplo:

      Sub test()
      Range(“A1”).Value = Range(“A1”).Value + 1
      numero = Range(“A1”).Value
      MsgBox “La nueva factura es ” & numero
      ‘Aquí pones tu código restante
      End Sub

  12. Ramon Falette says:

    sergio muchisimas gracias. de verdad que tienes un conosimiento de vba espectacular. mis mas grandes respetos.

  13. JORGE PALACIOS says:

    Saludos Sergio, quiero preguntarte si puedo hacer que no salgan los espacios en blanco al momento de visualizar
    las filas en el listbox, lo que pasa es que en RowSource lo coloco en “A1:E1000” por logica para
    que me cargue mas informacion, pero las filas llenas van hasta “A1:E359” asi no me muestra
    las filas vacias, pero si ingreso otro registro lo deja cargar en la bd pero no lo refleja en el
    listbox

    Private Sub UserForm_Initialize()

    Sheets(“CLIENTES”).Select
    ListBox1.ColumnCount = 5
    ListBox1.ColumnWidths = “290 pt;100 pt;200 pt;120 pt;200 pt”
    ListBox1.RowSource = “A1:E1000”

    End Sub

  14. Wilber Eraldo says:

    buenas una pregunta sergio, como puedo hacer para filtrar eso datos de ese listbox d la tabla, y en cual despues modificarlos.Gracias

  15. Graciela Perea says:

    Hola Sergio, pregunta de una novata: he tratado de adaptar tu ejemplo, pero no doy. Ya cambié el RowSource, y me muestra correctamente los datos en el formulario buscar, pero no se como indicar que se Active la celda del registro elegido, ya que se encuentra en otra hoja?
    Mucho agradeceré tu apoyo.

    • Hola Graciela:

      La ActiveCell aplica sólo a la hoja activa donde estén trabajando. Te recomiendo que cuando se ejecute el formulario, se active la hoja donde están los datos y cuando cierres el formulario, regreses al hoja donde estabas.

  16. Graciela Perea says:

    Hola Sergio, te agradezco tu pronta respuesta, me queda claro lo de ActiveCell, lo que no me da es dónde tengo que indicar la hoja, que en este caso es DIRECTORIO. Lo indique en el codigo del formulario buscar, pero creo que algo me falta, ya que se va a la hoja en cuestion pero como en la hoja 1 esta el formulario, ya no puedo ver el otro formulario que muestra los datos del registro.

    ‘Activar la celda del registro elegido
    Private Sub ListBox2_Click()
    Sheets (“DIRECTORIO”).Activate
    Fila = Me.ListBox2.ListIndex + 1
    For i = 1 To 6
    Cells(Fila, 1).Activate
    Next i

    End Sub

    Disculpa mi ignorancia, pero de verdad soy una burra!!. Podrías apoyarme, porfis?

    • Que tal Graciela:

      El botón que lanza el formulario estará en una hoja diferente a donde están tus datos y el código que debe contener es:

      Private Sub CommandButton1_Click()
      Application.ScreenUpdating = False
      Sheets(“DIRECTORIO”).Activate
      Buscar.Show
      End Sub

      Al momento de que cierres el formulario, el botón de cerrar debe contener el código:

      Private Sub CommandButton2_Click()
      Sheets(“Hoja2”).Activate ‘o como se llame tu hoja
      Application.ScreenUpdating = True
      Unload Me
      End Sub

      Haz pruebas y comentas.

  17. Roberto says:

    Podrias subir el ejemplo en xls porfavor es que tengo solo office 2000 en mi trabajo y bueno

  18. genial trabajo.
    Creo que es algo lo que pido. Me gustaría tratar un par de cosillas contigo por privado. Es posible?? Si quieres le dejo mi email
    Un Saludo y gracias x tu gran trabajo

  19. cesar says:

    amigo hice cada paso del ejemplo pero al ejecutarlo aparece el listbox en blanco. que estoy haciendo mal: el codigo que escribo es el siguiente:
    ‘Activar la celda del registro elegido
    Private Sub ListBox1_Click()
    Sheets(“ancianos”).Activate
    Fila = Me.ListBox1.ListIndex + 2
    For i = 1 To 12
    Cells(Fila, 1).Activate
    Next i
    End Sub
    ‘Dar formato al ListBox y traer datos de la tabla
    Private Sub UserForm1_Initialize()
    Sheets(“ancianos”).Select
    ListBox1.ColumnCount = 12
    ListBox1.ColumnWidths = “70 pt;60 pt;60 pt;60 pt;60 pt;60 pt;60 pt;60 pt;60 pt;60 pt;60 pt;60 pt”
    ListBox1.ColumnHeads = True
    End Sub

  20. Hernan Villarreal says:

    Hola Sergio, felicitaciones por tan buen trabajo, he tomado tu ejemplo y lo he adapatado a mis necesidades. Tengo una inquietud, uno de los datos a modificar o actualizar es de tipo combobox, me gustaria que debo hacer ya que reemplazo en me.control(“textbox” por “combobox y no me funciona, que debo hacer para traer el valor y poder modificarlo? te agradezco muchisimo tu colaboracion

    • Sergio Alejandro Campos says:

      Si usas Me.Controls("Combobox" & 1).Value debes tener en cuenta que tus Combos se tienen que comenzar con el texto Combobox, o en su defecto simplemente hacer referencia al objeto de la manera normal NombreCombo.Value

  21. Eduardo Rodriguez says:

    Hola Sergio , soy un seguidor de tu blog y te cuento que he aprendido mucho y te lo agradesco mucho.
    aTengo una pregunta sobre este post, al igual que otros usuarios he adaptado este formulario a mis necesidades , pero tengo un problemita mi tabla en unos d elos txtbox llama un dato numerico que esta en formato moneda , cuando lo llama en el textbox se ve de esta manera 10990,56 y en la tabla esta en este formato 10,990.56 como hago para que el dato se vea en el txtbosx igual como esta en la tabl?

    • sergioacamposh says:

      Que tal. Puedes usar este código.

      Private Sub CommandButton1_Click()
      With Me.TextBox1
      .Value = Range(“A1”).Value
      .Value = Format(.Value, “#,##0.00”)
      End With
      End Sub

  22. Eduardo Rodriguez says:

    Gracias por tu respuesta sergio , hice lo que me recomiendas pero no me funciona correctamente por las siguientes 2 razones.
    1- el codigo que me pasaste solo me funciona para una celda en especifico y tengo una BD con varios importes
    2-El otro problema es que cuando ejecuto el codigo el importe que tengo en esa celda esta asi 3,723.35 cuando ejecuto el codigo me lo pone asi 372,335.00

    Saludos

    • sergioacamposh says:

      Que tal.

      El código que te pasé es para formatear el o los TextBox que decidas, así que no importa cuántos importes tengas. Si tienes más TextBox nada más hay que replicar el código y cambiar el rango.

      Con respecto al formato del TextBox, si tu cantidad de la celda es 3 mill +, no entiendo por qué muestre la cantidad de 300 mil en el TextBox. Yo hice las pruebas y me salió bien.

      Prueba ingresando a mano la cantidad en la celda y ejecuta el código para validar que salga correctamente.

      En todo caso, por favor mecióname que configuración regional tienes en tu PC.

  23. Eduardo Rodriguez says:

    Gracias por tu respuesta, ya resolvi el problema con el codigo que me enviaste , estaba poniendo el formato de numero mal . Muchas gracias.

  24. Ana Catalina Peña Mesa says:

    Hola, quisiera saber si me puedes ayudar mandandome el archivo para enteder mejor el codigo, agradeceria muchisimo tu ayuda

  25. Joseph Sanchez says:

    hola, muy buenos tus ejemplos, tienes algún canal en youtube?

  26. Anibal Gallegos says:

    Que tal sergioacamposh, he visto tu ejemplo y lo he modificado para uno que estoy haciendo, el problema es el siguiente, en el form de modificar quiero que los texbox lo jalen pero de la selección del listbox sin ‘Activar la celda del registro elegido ya que se encuentra en otra hoja que va a estar oculta y por eso me marca error y a su vez pueda modificar los datos sin ver la hoja oculta.

  27. bjometal says:

    ¡Hola!

    Una duda con respecto al código. Todo me funciona a la perfección excepto al guardar la información, sólo me actualiza la primera celda, que capturo con el TextBox1, las demás no actualizan los datos. El proceso lo mando llamar de un módulo.¿Alguna sugerencia?

    Worksheets(“DatosFiltrados”).Activate

    For i = 1 To 6
    ActiveCell.Offset(0, i – 1).Value = frmFiltradoDeDatos.Controls(“TextBox” & i).Value
    Next i
    Call FuncionBoton.LimpiarTxtBoxModulo

    • bjometal says:

      ¡Típico!, cuando agotas toda la información disponible y te decides por preguntar tu duda, encuentras la solución de inmediato. Al parecer mi problema estaba con la variable “i”, la tenía declarada como pública, la declare dentro del proceso y problema resuelto.

      Gracias.

  28. Roy Torrez says:

    Hola, he tomado como ejemplo tu publicacion, que ha proposito esta super, pero si pudieras ayudarme en un pequeño lio q tengo. He creado un formulario a travez del cual ingreso datos de articulos diversos q van a una tabla en una independiente, lo he cargado en un listbox sin complicaciones, pero al momento de intentar modificar algun ingreso, la informacion no se carga en el formulario de modificacion mientras el puntero del mouse no se encuentra en la hoja activa. Que debo hacer? para que el formulario de modificacion cargue los datos a corregir independientemente de q si esta en la hoja activa.

  29. Guest says:

    Por otro lado, tengo otro caso, el formulario de ingreso no

  30. Roy Torrez says:

    Tomando el caso anterior, falto mencionarle que el formulario de ingreso trabaja con combobox, esta herramienta lista una serie de datos de otra hoja independiente. El problema esta justamente al momento de cargar los datos para modificar. Luego el formulario presenta error al momento de pretenderse proyectar. A ver si me puede ayudar.

  31. cecy says:

    tu ejemplo esta genial y me resulto muy util; pero me gustaria saber como borrar los datos si por ejemplo mi lista se encuentra en el rango A:C, que solo borre lo que seleccione de esta lista ya que tengo datos en las demas columnas y no quiero que me borre todo

  32. Xavier Muñoz says:

    Private Sub ListBox1_Click()
    fila = Me.ListBox1.ListIndex + 2
    For i = 1 To 4
    Cells(fila, 1).Activate
    Next i
    End Sub

    PERO UTILIZARLO EN LA HOJA 2

  33. Jebus says:

    Hola como van, primero que tod me ha servido muchisimo este blog para manejar excel de forma avanzada, los felicito por ese trabajo, ahora les presento mi problema:
    tengo un libro de excel donde lanzo el userforms desde la hoja1 y quiero filtrar y modificar con un combobox información de la hoja cuentas, ya pude con mucho esfuerzo hacerlo funcionar a medias, pero tengo dos problemas:
    1. cuando aparecen los resultados si hay mast de tres y selecciono alguno de los ultimos ( en un ejemplo de 3 o mas resultados, a partir del 3 resultado) me da un error 91 que hace falta un bloque with en la linea que comienza con las barritas //:

    Private Sub ListBox1_Click()
    Worksheets(“Cuentas”).Range(“A3”).Activate
    Cuent = Me.ListBox1.ListCount
    Set rango = Range(“A1”).CurrentRegion
    For i = 0 To Cuent – 1
    If Me.ListBox1.Selected(i) Then
    Valor = Me.ListBox1.List(i)
    // rango.Find(What:=Valor, LookAt:=xlWhole, After:=ActiveCell).Activate
    // Worksheets(“Cuentas”).Range(“A3:A600”).Find(What:=Valor, LookAt:=xlWhole, After:=ActiveCell).Activate
    End If
    Next i
    End Sub

    El segundo problema es que si selecciono el segundo resultado y le doy modificar siempre me trae el userform con los valores de la primera fila y no de la segunda, que puede ser?

    Gracias por la ayuda 🙂

  34. Gentyc says:

    Hola, primero quiero avisar que he echo un programita exclusivamente tomando ejemplos de esta pagina, modificandolos y complilandolos, pero he llegado a un punto que no se como solucionar algunas cosas, ya que mi conocimento es muy limitado, uno de los problemas que tengo o duda ( a la cual no le enceuntro respuesta leyendo los post y preguntas y respuestas, y por ello acudo a tu ayuda) es: al modificar desde un formulario la tabla, en mi caso una tabla de 38 columnas, se me modifican todas las celdas de la fila de la tabla, como hago para que SOLO se modifiquen aquellas en las que SI se calbió un dato mediante el formulario??? y no el resto, y esto va principalmente al hecho de que me modifica el formato de algunas celdas de la tabla y no se como solucionarlo. Gracias

  35. NATI says:

    buen dia les consulto.. como hago que este codigo me traiga por palabra y no por lista…
    digamos que necesito poder buscar por palabra y no por lista desplegable-…
    si alguien me puede ayudar …gracias!

    Private Sub CommandButton1_Click()

    Valor = Application.WorksheetFunction.VLookup(Me.ComboBox1.Value, Sheets(“BUSCAR CODIGO”).Range(“$B$10:$C$1999”), 2, 0)
    Me.Label1.Caption = Valor

    End Sub

    Private Sub CommandButton2_Click()

    Unload Me

    End Sub

    Private Sub UserForm_Initialize()

    Me.ComboBox1.List = Sheets(“BUSCAR CODIGO”).Range(“$B$10:$C$1999”).Value

    End Sub

  36. leonardo says:

    funciona bien con textbox, pero qué hacer cuando por ejemplo el nombre se carga en un combobox

  1. September 30, 2012

    […] 7-jul-12 había publicado un ejemplo que te permite pasar datos de una tabla de Excel a un objeto ListBox para después hacer […]

  2. October 10, 2012

    […] 7-jul-12 había publicado un ejemplo que te permite pasar datos de una tabla de Excel a un objeto ListBox para después hacer […]

  3. December 31, 2012

    […] Modificar datos de una tabla con un ListBox en Excel […]

Leave a Reply

Your email address will not be published. Required fields are marked *

%d bloggers like this: