【问题标题】:How to fix #NAME? error with formula or vba如何修复#NAME?公式或 vba 错误
【发布时间】:2016-01-11 06:55:42
【问题描述】:

我正在使用 excel 公式来引用并在必要时调整很长的抓取值列表。我的问题是,有时这些值以“=+”开头,导致它们被视为公式,从而产生#NAME?错误。每当我的公式引用这些单元格时,它也会产生上述错误。

在我的公式中是否存在 #NAME 错误?类似于 ISNA 但针对 #NAME 错误?

如果这不可能,我可以使用 VBA 从包含它的任何单元格中删除“=+”吗?

任何帮助将不胜感激,我已经寻找了几个小时的答案。

【问题讨论】:

  • 修复你的“抓取值”,你的公式就可以了。
  • 我正在寻找比这更简单的修复方法
  • 你听说过GIGO吗?
  • 不。但调整刮刀不是一种选择。如果我的要求是不可能的,那么我会想出另一种方法来解决它。

标签: vba excel excel-formula


【解决方案1】:

最简单的方法是在每个单元格的公式前面添加一个'。 假设您的刮取值在C1:C10 范围内,您可以像这样修复它:

For j = 1 To 10
    Range("C" & j).Value = "'" & Range("C" & j).Formula
Next j 

通过这样做,您可以保留已抓取对象的原始值。 当然,您可以从源头上解决问题,即想象您像这样打印您的值:

rng.Value = myScrapedValue

...你可以这样替换它:

rng.Value = quoteFirst(myScrapedValue)

...在哪里

Private Function quoteFirst(ByVal strng As String) As String
    quoteFirst = "'" & strng
End Function

【讨论】:

    【解决方案2】:

    我认为您可以直接在公式中使用 =IFERROR(),这样可以节省开发专门针对此特定错误的 VBA 代码的时间。

    【讨论】:

    • 感谢您的回复。这可能有效,但似乎不允许使用不理想的 else 语句。到目前为止,这是我得到的最好的解决方案。
    • 如果你真的需要一个else语句,你必须使用IF(ISERROR(...)
    【解决方案3】:

    你能不能用...之类的东西?

    =ERROR.TYPE(A1) =5

    这应该在公式中产生一个 TRUE-FALSE....

    【讨论】:

    • 我试过了,还有几种变体,但我似乎只能得到“真”或“#N/A”我做错了什么吗?
    • 您可能需要添加更多检查 ' 类似...=IF(ISERROR(B6);IF(ERROR.TYPE(B6)=5;"I am a NAME error"; "I am a different error");B6) 如果这没有错误,则返回该值,否则查看有问题的错误....
    【解决方案4】:

    如果你想删除“=+”,你可以使用这样的东西:

    Dim index As Integer
    For index = 1 To 10
        If (Mid(Cells(index, 1), 1, 2) = "=+") Then
            Cells(index, 1) = Mid(Cells(index, 1), 3)
        End If
    Next
    

    它将以不带“+=”的相同内容替换以“+=”开头的单元格的内容。

    【讨论】:

      猜你喜欢
      • 2018-04-20
      • 1970-01-01
      • 2011-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多