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 cliente | Nombre | Tipo de miembro |
---|---|---|
00123 | Stacy | Premium |
00234 | Darius | Recursos ordinarios |
011545 | Jerome | Recursos 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, 7 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