2016-09-28 4 views
0

У меня есть код VBA, который ищет значение из другого excel для создания флага True/False и на основе флага, я установил два разных значения char. Я получаю ошибку «object required» в следующем коде. Может кто-нибудь объяснить, почему?Ошибка объекта VBA с помощью функции диапазона

Sub test() 

    Dim part1 As String 
    Dim part2 As String 
    Dim a As Range 

    part1 = "=ifna(INDEX('DRG and Zip Summaries'!$A$10:$A$58,MATCH('DRG Summary Target'!F2 ""x_x_x""" 
    part2 = ",'DRG and Zip Summaries'!$C$10:$C$58,0)),'FALSE')" 

With Range("A2:A183").FormulaArray = part1 
            .Replace """x_x_x""", part2 
End With 

For Each a In Range("A2:A183") 
If a.Value = "FALSE" Then 
     Range("B" & a.rownum) = Chr(168) 
Else: Range("B" & a.rownum) = Chr(254) 
End If 
Next 

End Sub 
+2

Какая строка дает вам ошибку? 'Range (" B "& a.rownum)' неверно, это должно быть 'Range (" B "и a.Row)'. Кроме того, вы должны квалифицировать свои рефери, например «Рабочие книги» («Название книги»). Листы («Название листа»). Диапазон («A2: A183»). – Kyle

ответ

1

Не размещайте свою формулу в декларации WITH. Объявление WITH просто должно идентифицировать объект для работы, а не вносить какие-либо изменения, например, вставлять в него значения. Использование:

With Range("A2:A183") 
    .FormulaArray = part1 
... 

т.д.

Я не уверен, почему вы используете «часть1» и «part2» структуру либо. Если это только потому, что формула становится слишком долго, вы можете разбить линии, используя знак подчеркивания, таким образом:

formula=""=ifna(INDEX('DRG and Zip Summaries'!$A$10:$A$58," & _ 
    "MATCH('DRG Summary Target'!F2",'DRG and Zip Summaries'!" & _ 
    "$C$10:$C$58,0)),'FALSE')" 

Подчеркивание обеспечит эти три линии все обрабатываются в виде одной строки.

+0

Я удалил раздел «с» и использовал код, как предлагается с помощью & _. Ошибка теперь говорит: «Определенная программа или ошибка с определением объекта» –

+0

В моей формуле был сбой, с двойными кавычками перед =. Это должно быть formula = "= ifna (Index (.... и т. Д.) Также убедитесь, что вы закрываете« в конце каждой строки и включаете &, а затем снова открываете »в начале следующая строка – Werrf

+0

Да, я это заметил и написал формулу так, чтобы она выглядела следующим образом: Лист («Лист5»). Диапазон («A2: A183»). FormulaArray = «= ifna (INDEX (' DRG и Zip Summaries '! $ A $ 10: $ A $ 58, "& _ " MATCH («Итоговая цель DRG»! F2, «Суммы DRG и Zip»! »& _ « $ C $ 10: $ C $ 58,0)), 'FALSE') « –