¿Cómo para corregir un problema al guardar datos de un ListBox a una hoja de excel?

Estoy trabajando con un Form donde tengo un ListBox y al darle click en el botón de "Guardar" me da un error, no se que más hacer para que funcione, adjunto el código del botón, muchas gracias.

Private Sub CommandButton4_Click()
If combocliente = "" Or textruta = "" Then
  MsgBox ("Falta completar datos !!")
End If
  Dim FILA As Long
  Dim fecha As Date
  Dim ruta As String
  Dim cliente As String
  Dim cantidad As Integer
  Dim Unidad As Integer
  Dim producto As String
  Dim Total As Double  
  FILA = 2
  Do While Pedidos.Cells(FILA, 1) <> ""
    FILA = FILA + 1
  Loop
    If Me.combocliente.ListCount = 0 Then MsgBox ("Debe agregra productos al pedido"): Exit Sub
    For I = 0 To ListBox1.ListCount - 1
    txtfechapedido = Me.ListBox1.List(I, 0)
    textruta = Me.ListBox1.List(I, 1)
    combocliente = Me.ListBox1.List(I, 2)
    Textcant1 = Me.ListBox1.List(I, 3)
    Combound1 = Me.ListBox1.List(I, 4)
    ComboBox1 = Me.ListBox1.List(I, 5)
    Pedidos.cell(FILA, 1) = txtfechapedido
    Pedidos.cell(FILA, 2) = textruta
    Pedidos.cell(FILA, 3) = combocliente
    Pedidos.cell(FILA, 4) = Textcant1
    Pedidos.cell(FILA, 5) = Combound1
    Pedidos.cell(FILA, 6) = ComboBox1
    FILA = FILA + 1
     Next I
      Me.ListBox1.Clear
End Sub

1 Respuesta

Respuesta
1

Tu error está en cómo nombras a la hoja. Si se llama 'Pedidos' debes nombrarla así:

        Do While Sheets("Pedidos"). Cells(FILA, 1)

Si la declaras en una variable sería así:

        Set Pedidos = Sheets("tu_hoja")

Do While Pedidos .Cells(FILA, 1)

Ahora, con respecto al modo de encontrar la primer celda vacía de la col utiliza esta instrucción, siempre y cuando debajo de tus datos no hay otras tablas. Si así fuera siempre hay modos mejores que recorrer la col con el bucle DO. Puedes mirar el video N° 11 de mi canal.

       FILA = Sheets("Pedidos").Range("A" & Rows.Count).End(xlUp).Row + 1     

Sdos y no olvides valorar la respuesta.

Elsa

¡Muchas, muchas Gracias! !!!

Hola Elsa, disculpa pero no logre hacer que se guardara correctamente, hice los cambios sugeridos pero tengo un error al final del código, podrías

Private Sub CommandButton4_Click()
  If combocliente = "" Or textruta = "" Then
  MsgBox ("Falta completar datos !!")
End If
  Dim FILA As Long
  Set Pedidos = Sheets("Pedidos")
  Dim fecha As Date
  Dim ruta As String
  Dim cliente As String
  Dim cantidad As Integer
  Dim Unidad As Integer
  Dim producto As String
  Dim Total As Double ' Esta variable permite decimales
  FILA = Sheets("Pedidos").Range("A" & Rows.Count).End(xlUp).Row + 1
  Do While Pedidos.Cells(FILA, 1)
    FILA = Sheets("Pedidos").Range("A" & Rows.Count).End(xlUp).Row + 1
  Loop
    If Me.combocliente.ListCount = 0 Then MsgBox ("Debe agregra productos al pedido"): Exit Sub
    For I = 0 To ListBox1.ListCount - 1
    txtfechapedido = Me.ListBox1.List(I, 0)
    textruta = Me.ListBox1.List(I, 1)
    combocliente = Me.ListBox1.List(I, 2)
    Textcant1 = Me.ListBox1.List(I, 3)
    Combound1 = Me.ListBox1.List(I, 4)
    ComboBox1 = Me.ListBox1.List(I, 5)
    Pedidos.cell(FILA, 1) = txtfechapedido
    Pedidos.cell(FILA, 2) = textruta
    Pedidos.cell(FILA, 3) = combocliente
    Pedidos.cell(FILA, 4) = Textcant1
    Pedidos.cell(FILA, 5) = Combound1
    Pedidos.cell(FILA, 6) = ComboBox1
     FILA = Sheets("Pedidos").Range("A" & Rows.Count).End(xlUp).Row + 1
     Next I
      Me.ListBox1.Clear
End Sub

ayudarme?, de antemano mil gracias.

Private Sub CommandButton4_Click()
  If combocliente = "" Or textruta = "" Then
  MsgBox ("Falta completar datos !!")
End If
  ' 
  Dim FILA As Long
  Set Pedidos = Sheets("Pedidos")
  Dim fecha As Date
  Dim ruta As String
  Dim cliente As String
  Dim cantidad As Integer
  Dim Unidad As Integer
  Dim producto As String
  Dim Total As Double  
  FILA = Sheets("Pedidos").Range("A" & Rows.Count).End(xlUp).Row + 1
  Do While Pedidos.Cells(FILA, 1)
    FILA = Sheets("Pedidos").Range("A" & Rows.Count).End(xlUp).Row + 1
  Loop
    If Me.combocliente.ListCount = 0 Then MsgBox ("Debe agregra productos al pedido"): Exit Sub
    For I = 0 To ListBox1.ListCount - 1
    txtfechapedido = Me.ListBox1.List(I, 0)
    textruta = Me.ListBox1.List(I, 1)
    combocliente = Me.ListBox1.List(I, 2)
    Textcant1 = Me.ListBox1.List(I, 3)
    Combound1 = Me.ListBox1.List(I, 4)
    ComboBox1 = Me.ListBox1.List(I, 5)
    Pedidos.cell(FILA, 1) = txtfechapedido
    Pedidos.cell(FILA, 2) = textruta
    Pedidos.cell(FILA, 3) = combocliente
    Pedidos.cell(FILA, 4) = Textcant1
    Pedidos.cell(FILA, 5) = Combound1
    Pedidos.cell(FILA, 6) = ComboBox1
     FILA = Sheets("Pedidos").Range("A" & Rows.Count).End(xlUp).Row + 1
     Next I
      Me.ListBox1.Clear
End Sub
Private Sub CommandButton4_Click()
If combocliente = "" Or textruta = "" Then
  MsgBox ("Falta completar datos !!")
End If
  '
  Dim FILA As Long
  Dim fecha As Date
  Dim ruta As String
  Dim cliente As String
  Dim cantidad As Integer
  Dim Unidad As Integer
  Dim producto As String
  Dim Total As Double
Set Pedidos = Sheets("Pedidos")
FILA = Sheets("Pedidos").Range("A" & Rows.Count).End(xlUp).Row + 1
    'Do While Pedidos.Cells(FILA, 1)
      'FILA = Sheets("Pedidos").Range("A" & Rows.Count).End(xlUp).Row + 1
    'Loop
If Me.combocliente.ListCount = 0 Then MsgBox ("Debe agregra productos al pedido"): Exit Sub
For I = 0 To ListBox1.ListCount - 1
    txtfechapedido = Me.ListBox1.List(I, 0)
    textruta = Me.ListBox1.List(I, 1)
    combocliente = Me.ListBox1.List(I, 2)
    Textcant1 = Me.ListBox1.List(I, 3)
    Combound1 = Me.ListBox1.List(I, 4)
    ComboBox1 = Me.ListBox1.List(I, 5)
    Pedidos.Cells(FILA, 1) = txtfechapedido
    Pedidos.Cells(FILA, 2) = textruta
    Pedidos.Cells(FILA, 3) = combocliente
    Pedidos.Cells(FILA, 4) = Textcant1
    Pedidos.Cells(FILA, 5) = Combound1
    Pedidos.Cells(FILA, 6) = ComboBox1
     FILA = Sheets("Pedidos").Range("A" & Rows.Count).End(xlUp).Row + 1
Next I
Me.ListBox1.Clear
End Sub

Hay varios detalles:

1- FILA se obtiene desde el fin de la hoja hacia arriba... por lo que no debiera haber ninguna otra tabla a continuación de la que te ocupa. Sino se utilizan otros modos como el uso de CurrentRegion (ver video 30 de mi canal) u otros. Por lo que a continuación quité esas líneas q recorren la col.

2- La palabra correcta es Cells(fila, col) .

3- Revisa los nombres de los controles.. que todos estén bien escritos.

Por si no te lo comenté antes, mira el video 11 y toma nota de lo que se debiera evitar, como el uso de ME ;)

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas