¿Por qué mi IFNA (o ISNA) no funciona en un módulo VBA?

¿Por qué mi IFNA (o ISNA) no funciona en un módulo VBA?

tengo el siguiente código:

Sub TestNA2()
IsThisNA = Sheets("sheet1").Range("D:D").Select
'Sheets("sheet1").Range("E:E").Select
Range("E2").Formula = "=IF(ISNA(D1),""Delete"","""")"
Range("E2").AutoFill Destination:=Range("E:E"), Type:=xlFillDefault
'ActiveCell.Value = "=IF(ISNA(D:D), ""Delete"","""")"
'ActiveCell.Value = IsThisNA
'MsgBox IsNA
End Sub

pero aparece un error en esta línea: ActiveCell.Value = IfNa(D6, "Delete")

Lo que quiero que suceda es poner la palabra "eliminar" en la celda E6 si D6 es #NA.

¿Alguien puede ayudarme con este código?

Respuesta1

El error está en esta fila:

ActiveCell.Value = IfNa(D6, "Delete")

Utilice en su lugar:

Set IsThisNA = Sheets("items-1").Range("D6")
If Application.WorksheetFunction.IsNA(IsThisNA.Value) Then 
  ActiveCell.Value = "Delete"
End If

o, más sucintamente:

If Application.WorksheetFunction.IsNA(Sheets("items-1").Range("D6").Value) Then 
  ActiveCell.Value = "Delete"
End If

Respuesta2

Deberías hacer una cadena con la fórmula. Tienes:

ActiveCell.Value = IfNa(D6, "Delete")

Pero esto debería ser:

ActiveCell.Formula = "=IF(ISNA(D6), ""Delete"","""")"

Tenga en cuenta que agregué el segundo parámetro de IFpara que sea la cadena vacía, pero es posible que desee cambiar esto.

Nota: puedes usarIFNAdesde Excel 2011 en lugar de IF(ISNA(..),..).

Editar:Residencia enesta respuestapuedes extenderlo para toda la columna:

Range("E1").Formula = "=IF(ISNA(D1),""Delete"","""")"
Range("E1").AutoFill Destination:=Range("E:E"), Type:=xlFillDefault

También puedes poner un rango fijo, por ejemplo E1:E6, como se indica enaquí.

Edición 2:Si desea completarlo para toda la columna, debe colocar la fórmula en la fila 1 (p. ej. E1) y realizar el autocompletar en toda la columna (p. ej E:E.). Si quieres menos filas debes indicarlo en el destino de autocompletar, por ejemplo:

Range("E2").Formula = "=IF(ISNA(D6),""Delete"","""")"
Range("E2").AutoFill Destination:=Range("E2:E10"), Type:=xlFillDefault

Entonces, el rango de autocompletar comienza en la misma ubicación que la fórmula ( E2en este ejemplo).

información relacionada