2017-02-13 5 views
1

У меня возникла бы проблема с созданием массива, который содержит несколько данных, которые затем будут объединены в один файл. Во время чтения информации из файлов, а затем, помещая их в другой объединенный файл, петля, в которой он находится, обнаруживает ошибку 2042. Я нашел в Add Watch, что он хочет вернуть # N/A, поскольку функция в исходном файле ничего не возвращает. Как я могу избежать остановки макросов? Я нашел способы пропустить эту запись, но я не могу вставить ее в мой текущий цикл из-за недостаточного опыта в их обработке. Он останавливается здесь «Если aOutput (1, outputCol) = aDataFromPivotFiltered (1, filterCol) Затем« Смотрите ниже небольшой бит макроса.VBA 2042 Тип несоответствия - # N/A - Array

For outputCol = 1 To UBound(aOutput, 2) 
    For filteredCol = 1 To UBound(aDataFromPivotFiltered, 2) 
     If aOutput(1, outputCol) = aDataFromPivotFiltered(1, filteredCol) Then 
      For filteredRow = 2 To UBound(aDataFromPivotFiltered, 1) 
       aOutput(filteredRow, outputCol) = aDataFromPivotFiltered(filteredRow, filteredCol) 
      Next filteredRow 
      Exit For 
     End If 
    Next filteredCol 
Next outputCol 

Я нашел нижеследующее, что было бы хорошо, но на него был нанесен другой макрос.

Sub Test() 
    Dim varIn As Variant 
    [a1].FormulaR1C1 = "=NA()" 
    If IsError([a1].Value2) Then 
     varIn = "skip record" 
    Else 
     varIn = [a1].Value2 
    End If 
End Sub 

Есть ли кто-нибудь, кто мог бы мне помочь? Он продолжает вызывать головные боли, неважно, сколько статей я читаю в этой теме. Не могу понять.

+0

Когда вы создаете этот массив, 'aDataFromPivotFiltered' пропускают ячейки, которые имеют ошибки в формуле. –

+0

Здравствуйте, Скотт, да, я бы хотел пропустить их, но как закодировать его в моем текущем цикле? –

+0

Вы можете найти описание ошибки. Использовать обработчик ошибок, например, «On Error Goto errOut:» ... подробнее на http://www.cpearson.com/excel/errorhandling.htm. Если вы хотите продолжить цикл, можно использовать «On Error Resume Next» –

ответ

0

Тест на наличие ошибок во-первых, как показано ниже:

If Not IsError(aDataFromPivotFiltered(1, filteredCol) And Not IsError(aOutput(1, outputCol)) Then 
    If aOutput(1, outputCol) = aDataFromPivotFiltered(1, filteredCol) Then 
     For filteredRow = 2 To UBound(aDataFromPivotFiltered, 1) 
      aOutput(filteredRow, outputCol) = aDataFromPivotFiltered(filteredRow, filteredCol) 
     Next filteredRow 
     Exit For 
    End If 
End If 

Таким образом, любая формула ошибки, которые передаются в массив будет пропущен.

+0

Это работает, спасибо !!! –

Смежные вопросы