Заменить #Ref в нескольких диапазонах - PullRequest
0 голосов
/ 18 сентября 2019

Новичок в кодировании, извините, если я полностью игнорирую контексты, поскольку я все еще пытаюсь изучить их.

У меня есть ячейки, которые пытаются извлечь данные из нескольких сводных таблиц в другой рабочей таблице.Если он не может извлечь какую-либо информацию из сводных таблиц, он вернет #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 голос
/ 19 сентября 2019

В качестве альтернативы 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...