为什么我的 IFNA(或 ISNA)不能在 VBA 模块中工作?

为什么我的 IFNA(或 ISNA)不能在 VBA 模块中工作?

我有以下代码:

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

但它在这一行出错:ActiveCell.Value = IfNa(D6, "Delete")

如果 D6 是 #NA,我想要做的就是在单元格 E6 中输入单词“删除”。

有人可以帮我解决这个代码吗?

答案1

错误出现在这一行:

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

改用:

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

或者更简洁地说:

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

答案2

你应该用公式创建一个字符串。你有:

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

但这应该是:

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

请注意,我添加的第二个参数是IF空字符串,但您可能想要更改它。

注意:您可以使用IFNA自 Excel 2011 起,不再使用IF(ISNA(..),..)

编辑:基于这个答案您可以将其扩展到整个列:

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

您还可以输入固定范围,例如E1:E6,如这里

编辑2:如果要填充整列,则应将公式放在第 1 行(例如E1),然后对整列进行自动填充(例如E:E)。如果要填充较少的行,则应在自动填充目标中指明,例如:

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

因此自动填充范围从与公式相同的位置开始(E2在此示例中)。

相关内容