Por que meu IFNA (ou ISNA) não funciona em um módulo VBA?

0

eu tenho o seguinte 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

mas com erros nesta linha: ActiveCell.Value = IfNa (D6, "Delete")

o que eu quero que aconteça é colocar a palavra "delete" na célula E6 se D6 for #NA.

alguém pode me ajudar com esse código?

    
por DanM 28.01.2016 / 15:23

2 respostas

1

O erro está nesta linha:

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

Use em vez disso:

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

ou, mais sucintamente:

If Application.WorksheetFunction.IsNA(Sheets("items-1").Range("D6").Value) Then 
  ActiveCell.Value = "Delete"
End If
    
por 28.01.2016 / 15:30
1

Você deve criar uma string fora da fórmula. Você tem:

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

Mas isso deve ser:

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

Note que eu adicionei o segundo parâmetro de IF para ser a string vazia, mas você pode querer mudar isso.

Observação: você pode usar IFNA desde o Excel 2011 em vez de IF(ISNA(..),..) .

Editar: com base em esta resposta , você pode estendê-la para toda a coluna:

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

Você também pode colocar um intervalo fixo, por exemplo, E1:E6 , conforme indicado em aqui .

Editar 2: se você quiser preenchê-lo para a coluna inteira, coloque a fórmula na linha 1 (por exemplo, E1 ) e preencha automaticamente a coluna inteira (por exemplo, %código%). Se você quiser menos linhas, deve indicar isso no destino de preenchimento automático, por exemplo:

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

Portanto, o intervalo de preenchimento automático está iniciando no mesmo local da fórmula ( E:E neste exemplo).

    
por 28.01.2016 / 15:33