se ha producido el error '-2147417848 (80010108)' en tiempo de ejecucion. Error en el metodo 'Add' del objeto 'ListRows'

Anónimas
2022-12-29T14:40:32+00:00

Buenos dias.

Espero pueda recibir la ayuda efectiva para con este error y adicionalmente, si no fuese una respuesta concreta y su solucion, alguna manera de manejar este error a traves de codigo y MsgBox

Resulta que tengo creada algunas lineas de codigo a traves de modulos que se llaman dentro de los formularios con la instruccion "Call". Toda mi codificacion, en su mayoria, esta realizada bajo modulos (4 modulos) para ser usados dentro de los respectivos formularios.

En ese sentido, realizando la entrada de datos en una hoja especifica de un libro, a traves de un formulario, me esta mostrando el siguiente error:

Este error no se produce siempre. Es ocasional, lo que provoca que el archivo se cuelgue y no se pueda realizar ninguna accion en las hojas de calculo, lo cual conlleva a que cierre completamente la aplicacion y al abrirla nuevamente, realizar manualmente la eliminacion de la fila de datos que no creó ningun valor y que por ende, fue a causa de este error. Es decir, cuando se produce el error, no llena la fila con los datos del formulario, pero si crea una nueva fila dentro de la tabla dinamica ya que el procedimeinto de llenado por alguna razon se interrumpe.

Al cerrar el libro y abrirlo nuevamente, se ve la fila creada pero sin datos, lo cual no es conveniente para realizar una entrega de la aplicacion.

Agradezco su pronta ayuda para resolver este problema. Podria compartir parte del codigo para esta instruccion pero no el archivo completo, puesto que es un producto para una empresa "X' que esta en fase de darrollo y por ende no puedo compartir.

Saludos cordiales,

Jose Veliz

Microsoft 365 y Office | Excel | Para la casa | Windows

Pregunta bloqueada. Esta pregunta se migró desde la Comunidad de Soporte técnico de Microsoft. Puede votar si es útil, pero no puede agregar comentarios o respuestas ni seguir la pregunta.

0 comentarios No hay comentarios
{count} votos

12 respuestas

Ordenar por: Muy útil
  1. Anónimas
    2022-12-29T17:07:18+00:00

    Hola, soy Leonielhou, una Asesora Independiente y una usuaria como tú, estoy encantada de ayudarte a aclarar cualquier duda que puedas tener.

    Por favor, vea este artículo, parece ser similar a su preocupación. Avíseme si necesita más ayuda.

    https://answers.microsoft.com/en-us/msoffice/forum/all/run-time-error-2147417848-80010108-method-add-of/cd61fbab-8f0a-4e1a-ac8a-13c601249692

    Esta respuesta se ha traducido automáticamente. Como resultado, puede haber errores gramaticales o expresiones extrañas.

    0 comentarios No hay comentarios
  2. Anónimas
    2022-12-29T19:18:31+00:00

    Hola Leonielhou,

    He leido el tema del enlace y noto que el problema del usuario fue resuelto a traves del alimpieza de un ListBox, pero en mi caso, esta parte del codigo no esta siendo accionada a traves de un ListBox.

    El codigo corresponde a un formulario comun, que adiciona nuevos datos a una tabla dinamica ya definida, sin necesiadad de ningun lisbox. solo textbox. A continuacion dejo el codigo creado dentro del modulo para esta parte, asi como una vista del formulario.

    Gracias por la ayuda que me puedas brindar Leonielhou.

    Sub IngresarNuevoMaterial()

    With frmMateriales

    If .txtMaterial = "" Then  
        MsgBox "Ingrese un Nombre de Material.", vbInformation, "Atención"  
        .txtMaterial.SetFocus  
        Exit Sub  
    End If  
      
    Dim BM As Range  
    Dim NombreMaterial As String  
    Dim siexiste As Long  
    Set BM = Hoja5.ListObjects("MATERIALES").ListColumns(2).DataBodyRange  
    NombreMaterial = .txtMaterial.Value  
    siexiste = Application.WorksheetFunction.CountIf(BM, NombreMaterial)  
    If siexiste <> 0 Then  
        MsgBox "El Material ingresado ya existe.", vbInformation, "Error"  
        .txtMaterial.Value = ""  
        .txtMaterial.SetFocus  
        Exit Sub  
    End If  
      
    If .txtUMaterial = "" Then  
        MsgBox "Ingrese una Unidad de medida del material.", vbInformation, "Atención"  
        .txtUMaterial.SetFocus  
        Exit Sub  
    End If  
      
    If .txtPMaterial = "" Then  
        MsgBox "Ingrese un Costo del material.", vbInformation, "Atención"  
        .txtPMaterial.SetFocus  
        Exit Sub  
    End If  
      
    If .txtProvedor = "" Then  
        MsgBox "Ingrese un provedor de referencia del material.", vbInformation, "Atención"  
        .txtProvedor.SetFocus  
        Exit Sub  
    End If  
      
    If .txtFecha = "" Then  
        MsgBox "Ingrese una fecha de referencia de cotización del material.", vbInformation, "Atención"  
        .txtFecha.SetFocus  
        Exit Sub  
    End If  
    
    '\\crear nueva celda  
    Dim SiguienteCelda As Object  
    Sheets("MATERIALES").Unprotect Password:="xxxx"  
     
    If (Hoja5.ListObjects("MATERIALES").DataBodyRange.Rows.Count = 1) \_  
        And (Hoja5.ListObjects("MATERIALES").ListRows(1).Range.Cells(1).Value = "") Then  
        Set SiguienteCelda = Hoja1.Range("A13")  
          
    Else  
        Set SiguienteCelda = Hoja5.ListObjects("MATERIALES").ListRows.Add.Range.Cells(1)  
    End If  
      
    '\\llenar la base de materiales  
    With SiguienteCelda  
      
        Dim UltimoRegistro As Integer  
        UltimoRegistro = Hoja5.Range("H1").Value  
        .Value = CStr("MT" & UltimoRegistro + 1)  
          
        .Offset(0, 1).Value = frmMateriales.txtMaterial.Value  
          
        .Offset(0, 2).Value = frmMateriales.txtUMaterial.Value  
          
        .Offset(0, 6).Value = frmMateriales.txtPMaterial.Value  
          
        .Offset(0, 12).Value = frmMateriales.txtProvedor.Value  
          
        .Offset(0, 7).Value = frmMateriales.txtFecha.Value  
          
        .Offset(0, 9).Value = frmMateriales.txtFecha.Value  
          
        .Offset(0, 11).Value = frmMateriales.txtFecha.Value  
          
    End With  
      
    Unload frmMateriales  
      
    '\\incremento del ultimo registro  
    Hoja5.Range("H1").Value = Hoja5.Range("H1").Value + 1  
      
    Sheets("MATERIALES").Protect Password:="xxxx", AllowInsertingRows:=True, AllowSorting:=True, \_  
                AllowFiltering:=True, AllowDeletingRows:=True  
      
    

    End With
    End Sub

    Imagen

    0 comentarios No hay comentarios
  3. Anónimas
    2022-12-29T20:07:37+00:00

    Entiendo que el error se produce en:

    . . .

    Else
    Set SiguienteCelda = Hoja5.ListObjects("MATERIALES").ListRows.Add.Range.Cells(1)
    End If

    '\llenar la base de materiales
    With SiguienteCelda
    . . .

    He puesto una tabla llamada MATERIALES en la hoja5, ejecuté...

    Set SiguienteCelda = Hoja5.ListObjects("MATERIALES").ListRows.Add.Range.Cells(1)

    ... y se inserta una nueva fila en la tabla sin problema, al tiempo que la variable SiguienteCelda se actualiza a la primera celda (izquierda) de la nueva fila.

    ► Si el problema se produce en otra parte del código,... indica donde.

    0 comentarios No hay comentarios
  4. Anónimas
    2022-12-29T22:36:11+00:00

    Hola _Antonio,

    Efectivamente, la ejecucion del procedimeinto se realiza, y solo en ocasiones, muy aisladas, arroja este error. Es decir, no se produce siempre sino solo en ocasiones. y debo realizar varios registros hasta que sucede y aparece, quiza 20 0 30 registros, o talves puede suceder al inicio. No entiendo porqie en ocasiones sucede y en otras no.

    Gracias por tu ayuda para comprender que sucede.

    0 comentarios No hay comentarios
  5. Héctor Miguel 71,585 Puntos de reputación
    2022-12-30T04:39:46+00:00
    1. ELIMINA la proteccion del proyecto de macros
    2. cuando vuelva a saltar el error > pulsa en "depurar"
    3. indica cual es la linea que causa el error
    4. comenta (exactamente) la situacion de registro que lo provoca
    0 comentarios No hay comentarios