2014-12-05 3 views
1

Я пытаюсь выполнить этот сегмент кода. Это упрощенная версия кода. Я включил соответствующий код. Я пытаюсь объединить строки и названные диапазоны в формулу SumIfs, но я получаю ошибку 1004 «Определенная приложением или объектная ошибка». У меня есть рабочая строка кода выше этой секции проблем, которая аналогична, за исключением выполнения функции sum, а не sumif. Любая идея, как заставить этот код выполнить? Спасибо.Объединение SumIfs в VBA

Dim wb As Workbook 
Dim ara As Worksheet 
Dim inv As Worksheet 
Dim ARBlock As Range 
Dim Invoices As Range 
Dim AgedDays As Range 

Set wb = ThisWorkbook 
Set ara = wb.Sheets("AR Aging") 
Set inv = wb.Sheets("Invoices") 
Set ARBlock = ara.Range("a6") 
Set Invoices = inv.Range("a6", inv.Range("a6").End(xlDown)) 
Set AgedDays = Invoices.Offset(0, 6) 

'Populate A/R age buckets 
For i = 6 To ARBlock.Rows.Count + 6 
    With ARBlock(i - 5, 1).Offset(0, 3) 
     .Value = "=SumIfs(" & Invoices.Offset(0, 4).Address & "," & _ 
        Invoices.Address & "," & ARBlock(i - 5, 1).Value & "," & _ 
        Invoices.Offset(0, 6).Address & ","" <= "" & &O30)" 
    End With 
Next i 

End Sub 

Линия, начинающаяся с «.value», где я получаю сообщение об ошибке. P.S .: Мне нужна ячейка, чтобы содержать конкатенированную формулу, в отличие от выходного значения.

UPDATE 1:

Как некоторые предложил я обновил .value строку:

.Offset(0, 3).Formula = "=SumIfs(Invoices.Offset(0, 4).Address,Invoices.Address,ARBlock.cells(i - 5, 1).Value)" 

Я все еще получаю ту же ошибку. Некоторые ревизии, которые я сделал:

Удаление «=» перед «Sumifs» позволяет коду работать нормально; вставка в формулу в целевую ячейку в виде текста. В этом виде мой вывод для i = 1 поступает в ARBlock.cells (1,1), как и следовало ожидать.

Я также использовал Debug.Print, чтобы просмотреть все компоненты формулы:

Debug.Print ARBlock.Cells(i - 5, 1).Address 
'output $A$6 
Debug.Print ARBlock.Cells(i - 5, 1).Value 
' output International Business Machines 
Debug.Print Invoices.Offset(0, 4).Address 
'output $E$6:$E$255 
Debug.Print Invoices.Address 
'output $A$6:$A$255 

Я подозревал, что этот вопрос может быть, что размеры диапазон может быть выключен, но это не так. Следующее мое подозрение заключается в том, что для выпуска формулы International Business Machines необходимо, чтобы формула читала ее правильно. Я зашит в

""International Business Machines"" 

, чтобы увидеть, если это будет исправить формулу, но я получаю ту же ошибку, когда я добавляю «=» обратно. Синтаксис формулы верен, то размеры одинаковы между суммой диапазон и диапазон критериев. У кого-то еще есть идеи?

+0

Моя догадка есть «ARBlock (i - 5, 1) .Value», фактическая ячейка, на которую вы ссылаетесь, является индексом <= 0? – Larry

+0

При назначении формулы вы должны использовать '.Formula', а не' .Value'. В этой строке много чего происходит, поэтому попробуйте разделить ее на несколько строк и посмотрите, где на самом деле ошибка. Попробуйте добавить «'» в начале формулы (чтобы ячейка рассматривала ее как текст) и посмотрите, выглядит ли она правильно. –

+0

Если вы присвоите результат построения формулы строке, вы сможете увидеть, является ли она действительной формулой. Для начала '", "" <= "" & & O30) "' выглядит неправильно. И 'ARBlock (i - 5, 1) .Value' должен быть' ARBlock.Cells (i - 5, 1) .Value' –

ответ

0
.Offset(0, 3).Formula = "=SumIfs(Invoices.Offset(0, 4).Address,Invoices.Address,ARBlock.cells(i - 5, 1).Value)" 

Изменение к:

.Offset(0, 3).Formula = "=SumIfs(" & Invoices.Offset(0, 4).Address & ", " & Invoices.Address & ", " & chr(34) & ARBlock.Cells(i - 5, 1).Value & chr(34) & ")" 

EDIT: Добавлен цитирует chr(34) вокруг вашего строка!

+0

Работал как шарм. Спасибо! – LeoPTY

-1

Ваш ARBlock(i - 5, 1).Value, скорее всего, это пустая клетка, которая портит в SUMIFS формулу, как он строит его для последовательного запятых

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