Error de ejecución '1004': Error definido por la aplicación o definido por el objeto

Tengo un código macro VBA para hacer limpieza de datos para otros documentos. En esta parte particular del código que filtra y luego selecciona la celda particular debajo de un encabezado de columna después de filtrar como se muestra a continuación para que pueda cambiar el valor de la celda seleccionada.

Dim myDB as Range
Set myDB = .Range("A1:" & ColumnLetter(lCol) & "1").Resize(.Cells(.Rows.Count,1).End(xlUp).Row) 'To set the variable as the whole worksheet
With myDB
.AutoFilter field:=policycolNo, Criteria1:="..."
.AutoFilter field:=customerTypeColNo, Criteria1:="..."
End With
Activesheet.Autofilter.Range.Offset(1).SpecialCells(xlCellTypeVisible).Cells(1, customertypeColNo).Select
ActiveCell.Value = "..."

Antes de la entrada del bucle a continuación, el código anterior no tendría problemas en funcionamiento. Sin embargo, cuando se introduce este bucle, correr hasta la línea de código de abajo devolvería el error de tiempo de ejecución.

Activesheet.Autofilter.Range.Offset(1).SpecialCells(xlCellTypeVisible).Cells(1, customertypeColNo).Select

Este es el bucle que cambia los valores de la columna A como se muestra a continuación porque quiero convertir algunos enteros en texto ya que son identificadores únicos para un vlookup en otro libro de trabajo. Este bucle se ejecutará antes del párrafo principal de los códigos anteriores.

Dim r as Range
For Each r in Range("A:A")
   r.NumberFormat = "@"
Next r

A continuación se muestra una tabla que justifica por qué necesitaría cambiar los enteros al texto.

ID de clienteNombreTipo de miembro
00123StacyPremium
00234DariusRecursos ordinarios
011545JeromeRecursos ordinarios

El error Runtime error '1004': Error definido por la aplicación o definido por el objeto evitaría que mi macro progresara más. ¿Alguna idea por qué?

Pregunta hecha hace 3 años, 5 meses, 0 días - Por logicluminary


3 Respuestas:

  • En lugar de bucle a través de todas las células de la columna A, esto es mucho más eficiente:

    ActiveSheet.Columns(1).NumberFormat = "@"
    

    Respondida el Dec 16, 2020 a las 11:49 - por scriptsculptorbf10

    Votos positivos: 0 | Votos negativos: 0

  • El error '1004' en VBA generalmente significa que hay un problema con la forma en que estás intentando interactuar con un objeto en Excel. En este caso, el error ocurre en la línea de código:

    vba
    Activesheet.Autofilter.Range.Offset(1).SpecialCells(xlCellTypeVisible).Cells(1, customertypeColNo).Select
    

    Puede ser causado por varios motivos posibles, pero una posible causa es que después de cambiar el formato de las celdas en la columna A a texto, Excel ya no puede filtrar y seleccionar las celdas correctamente.

    Para solucionar este problema, puedes intentar modificar la forma en que seleccionas la celda para cambiar su valor. En lugar de usar .Select para seleccionar la celda activa, puedes asignar directamente el valor que deseas a la celda sin necesidad de seleccionarla. Aquí te dejo un ejemplo de cómo podrías hacerlo:

    vba
    Dim visibleCell As Range
    On Error Resume Next
    Set visibleCell = ActiveSheet.AutoFilter.Range.Offset(1).SpecialCells(xlCellTypeVisible).Cells(1, customertypeColNo)
    On Error GoTo 0
    
    If Not visibleCell Is Nothing Then
        visibleCell.Value = "..."
    Else
        MsgBox "No se encontraron celdas visibles después del filtro.", vbExclamation
    End If
    

    Este código intenta obtener la celda visible directamente y asignarle el valor deseado. También incluye una verificación para manejar el caso en que no se encuentren celdas visibles después de aplicar el filtro.

    Por favor, inténtalo y avísame si eso resuelve el error '1004' que estás experimentando.

    Respondida el Dec 17, 2020 a las 11:52 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El error "Error definido por la aplicación o definido por el objeto" en VBA a menudo indica que hay un problema con el objeto al que se hace referencia en el código. En este caso, el error ocurre en la línea:

    
    Activesheet.Autofilter.Range.Offset(1).SpecialCells(xlCellTypeVisible).Cells(1, customertypeColNo).Select
    

    Esta línea intenta seleccionar la primera celda visible en la columna customertypeColNo dentro del rango de Autofiltro de la hoja de trabajo activa. Sin embargo, después de ejecutar el bucle para cambiar los valores de la columna A a texto, el rango de Autofiltro puede no estar configurado correctamente o puede haber cambiado.

    Para solucionar este problema, puedes intentar restablecer el rango de Autofiltro antes de intentar seleccionar la celda:

    
    With Activesheet
        .AutoFilterMode = False
        .AutoFilter field:=policycolNo, Criteria1:="..."
        .AutoFilter field:=customerTypeColNo, Criteria1:="..."
        .Autofilter.Range.Offset(1).SpecialCells(xlCellTypeVisible).Cells(1, customertypeColNo).Select
    End With
    

    Este código restablecerá el rango de Autofiltro antes de intentar seleccionar la celda, lo que debería resolver el error.

    Respondida el Dec 17, 2020 a las 12:00 - por Gemini

    Votos positivos: 0 | Votos negativos: 0