编码的新手,很抱歉,如果我仍在尝试学习上下文,而我完全忽略了上下文的话。

我有试图从另一个工作表中的几个数据透视表中提取数据的单元格。 如果无法从数据透视表中提取任何信息,它将返回#REF。 该宏应该在几个范围内的每个单元格中搜索以查找#REF并将其替换为0。之所以要使用该范围而不是整个工作表,是因为某些方程式试图从表中添加值并且由于其中一些值为#REF,因此总和最终也为#REF。 我需要将这些方程式保留在那里,因此一旦替换#REF,它们将得到总和。

    Dim Areas(13) As Range
    Set Areas(1) = Range("C5:Z7")
    Set Areas(2) = Range("C10:Z14")
    Set Areas(3) = Range("C27:Z27")
    Set Areas(4) = Range("C33:Z45")
    Set Areas(5) = Range("C52:Z55")
    Set Areas(6) = Range("C58:Z61")
    Set Areas(7) = Range("C63:Z66")
    Set Areas(8) = Range("C68:Z72")
    Set Areas(9) = Range("C74:Z78")
    Set Areas(10) = Range("C80:Z84")
    Set Areas(11) = Range("C86:Z90")
    Set Areas(12) = Range("C92:Z96")
    Set Areas(13) = Range("C102:Z112")

    For R = 1 To 13
        For Each cell In Areas(R)            'Error: For Each may only iterate over a collection object 
            If cell.Value = CVErr(xlErrName) Then
                .Replace What:="#REF!", Replacement:="0", LookAt:=xlPart, _
                SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                ReplaceFormat:=False
            Else
        Next

在我的代码之后,我做了很多笔记,以尝试根据下面列出的其他StackOverflow问题进行解决。 我认为他们的工作将形成一个单一的范围,但我正在与多个。 如果我所做的一切都没有意义,那么请忽略以下内容并帮助我重新开始。 (请?)让我知道是否需要更多信息。

    If IsError(cell.Value) Then
'    If cell.Value = CVErr(xlErrName) Then
'        ...
'    End If
'End If

'Dim nm As Name
'    For Each nm In ActiveWorkbook.Names
'        If InStr(nm.Value, "#REF!") > 0 Then
'            nm.Delete
'    End If
    'Next nm

'    ActiveCell.Replace What:="#REF!", Replacement:="0", LookAt:=xlPart, _
'        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
'        ReplaceFormat:=False

'With Range("B11:AP55").SpecialCells(xlCellTypeFormulas)
'    .Formula = Replace(.Formula, "#REF", "Master", , , vbTextCompare)
'End With

#1楼 票数:1 已采纳

作为Find的替代方法,请考虑使用SpecialCells

删除#REF错误

Sub Demo1()
    Dim rng As Range
    Dim rErr As Range
    Dim cl As Range

    With ActiveSheet 'or specify a specific sheet
        Set rng = .Range("C5:Z7,C10:Z14,C27:Z27,C33:Z45,C52:Z55,C58:Z61,C63:Z66,C68:Z72,C74:Z78,C80:Z84,C86:Z90,C92:Z96,C102:Z112")
    End With

    On Error Resume Next
    Set rErr = rng.SpecialCells(xlCellTypeFormulas, xlErrors)
    On Error GoTo 0

    If Not rErr Is Nothing Then
        For Each cl In rErr.Cells
            If cl.Value = CVErr(xlErrRef) Then
                cl.Offset(0, 1) = 0
            End If
        Next
    End If
End Sub

删除所有错误:

Sub Demo2()
    Dim rng As Range
    Dim rErr As Range

    With ActiveSheet 'or specify a specific sheet
        Set rng = .Range("C5:Z7,C10:Z14,C27:Z27,C33:Z45,C52:Z55,C58:Z61,C63:Z66,C68:Z72,C74:Z78,C80:Z84,C86:Z90,C92:Z96,C102:Z112")
    End With

    On Error Resume Next
    Set rErr = rng.SpecialCells(xlCellTypeFormulas, xlErrors)
    On Error GoTo 0

    If Not rErr Is Nothing Then
        rErr = 0
    End If
End Sub

  ask by signup4stuffmatt translate from so

未解决问题?本站智能推荐:

1回复

根据值替换范围内的公式

我试图找到一种更快的方式来查看范围,并用单元格的值替换公式,但仅适用于显示“不在此处”以外的值的单元格。 到目前为止,我的代码如下。 它有效,但它运行缓慢! 尽管进行了广泛的搜索,但我还没有想出更好的方法。Dim rng2 As RangeSet rng2 = Sheets("User Daily"
1回复

匹配并替换多张工作表中多个范围内的列中的字符串

我正在尝试编写将搜索多个范围并匹配字符串前半部分的代码。 如果匹配为true,则他们会将范围内的单元格替换为列中的单元格。 我找到了这段代码,并进行了一些更改,以搜索不同工作表上多个范围内的多个列,并在字符串的第一部分匹配时替换掉。 我遇到的另一个问题是,例如,我需要它来搜索单元格中的
1回复

替换选定命名范围内的值

单元格A1到单元格A7已被命名为Tokyo。 单元格A1,A2,A6,A10的值为“ [ABC]”。 运行代码时,应将单元格A1,A2,A6中的值替换为“ 15迁移”,并且单元格A10的值应保持为“ [ABC]”,因为它不在指定的范围内。 我尝试了以下操作,但它也替换了命名范围之外的值:
1回复

VBAExcel查找范围内的单词并替换

我想用另一个单词替换列中的单词,但是我的代码似乎不起作用,我仍然试图控制编码语言,但这对我来说并不直观。 情况: 期望的结果: 我的代码 谢谢!
1回复

替换一个范围内的数据

我已经过滤了一个工作簿,并且需要用“问题”替换列A中的所有数据。 这似乎很简单,我敢肯定,因为在没有过滤器的情况下我可以使其正常工作。 我设置了一个动态范围,并使用了“对于DRange中的每个单元格”,但没有任何乐趣。 任何建议或帮助将不胜感激, 谢谢, 夏兰
1回复

在过滤范围内替换文本

有人可以为我提供以下有效的方法吗,因为我目前正在使用“非常”冗长的方法。 我已应用过滤器/已为过滤后的数据设置了动态范围-例如: 对于过滤器中的每一行,我想用文本“ ISSUE”替换列A的内容。 目前,我正在逐行跳过它们,但这对于我拥有的数据量来说非常慢。 有什么好的建议吗?
3回复

用vba替换范围内的任何字母[AZ]

我有一个自由文本字段,其中包含不同长度的文本和数字。 我需要用“x”替换列中的任何字母。 我已成功使用 'rng.replace' 替换特定文本,但需要包含任何字母 [AZ] 我无法获得“什么”的正确语法来匹配任何和所有字母 AZ 任何帮助,将不胜感激。 我有一个有效的循环,但是,它非常慢并且使我的
2回复

在命名范围内搜索和替换-VBAforExcel

我有一个包含约一百个命名范围的Excel电子表格。 我想运行一个脚本以在那些命名范围内找到某些字符串,并将其替换为另一个字符串。 问题在于更改命名范围的名称,同时保持基础单元格引用相同。 标准的Excel搜索和替换功能不适用于命名范围。 例如:命名范围=“ Turnover_Shop