2014-01-30 3 views
0

Я использую приведенный ниже код и получаю сообщение об ошибке. Код используется, чтобы взять группу элементов sigle и сгруппировать их и их отдельные значения вместе.excel macro application-defined or object-defined error

application-defined or object-defined error Когда код достигает линии: `.Range ("В15: В" & LastRow) .Formula = "= SUMIF (" & myrng1.Address & " RC [-1]," & myrng2 .Address & «)»

ошибка с средней части кода RC[-1] Если кто-то может сказать мне, что я shuld использовать вместо этого, было бы большим подспорьем `

Кодекса

Sub InventorySummerise() 

Dim LastRow As Long 
LastRow = Cells(Rows.Count, "B").End(xlUp).Row 
Set myrng1 = Range("B2:B" & LastRow) 
Set myrng2 = Range("D2:D" & LastRow) 
Cells(LastRow + 5, 2).Select 
With ThisWorkbook.Sheets("Sheet1") 
    .Range("B15:B" & LastRow).Formula = "=SUMIF(" & myrng1.Address & ",RC[-1]," & myrng2.Address & ")" 
End With 

End Sub 

Любая помощь с тем, что неправильно было бы удивительно, им в конце остроумия с ним

Спасибо!

+0

Какая строка является нарушением кода? Я подозреваю, что это 4-я строка снизу. Я не уверен, что введенная вами формула действительна. 'Dim' строка прямо перед. .Range (" B15: B "& ..." и установите строку, равную правой стороне строки, начиная с '.Range (" B15: B "& .... Добавьте чат, скопируйте строку, а затем вручную вставьте формулу в ячейку и посмотрите, не приведет ли Excel к ошибке. – DeanBDean

+0

yeap извините, ребята просто исправили ее, так что добавьте строку и часы ey? Вы уверены, что собираюсь работать с '= SUMIF' там? –

+0

Строка не волнует, правильна ли формула или нет, а строка - всего лишь массив символов. Но объект формулы в объекте Range позаботится, если он действителен Часы - это просто простой способ скопировать значение String и протестировать его в Excel. Я часто использую этот метод, когда тестирую сложные формулы в vba. – DeanBDean

ответ

4

два способа добиться этого:

One:

'~~> change RC[-1] reference to A1 notation 
'~~> so if you are putting formula in B15, RC[-1] is A15 
With ThisWorkbook.Sheets("Sheet1") 
    .Range("B15:B" & LastRow).Formula = "=SUMIF(" & myrng1.Address & ",A15," & myrng2.Address & ")" 
End With 

Два:

'~~> As what Patrick said, use FormulaR1C1 
'~~> Then change R1C1 address reference style for your ranges 
With ThisWorkbook.Sheets("Sheet1") 
    .Range("B15:B" & LastRow).FormulaR1C1 = "=SUMIF(" & myrng1.Address(ReferenceStyle:=xlR1C1) & ",RC[-1]," & myrng2.Address(ReferenceStyle:=xlR1C1) & ")" 
End With 

надеюсь, что это поможет.

+0

Красиво сделано :-) –

+0

Спасибо! делает по мере необходимости! –

+0

+1 (хотя я не уверен, что это решает проблемы OP) – pnuts

1

Вы пытаетесь использовать формулы R1C1 для нормальной формулы.

Если использовать .Range("B15:B" & LastRow).FormulaR1C1 = "..."

Попробуйте это:

Sub InventorySummerise() 
    On Error Resume Next 
    Dim LastRow As Long, myrng1 As Range, myrng2 As Range 
    LastRow = Cells(Rows.Count, "B").End(xlUp).Row 
    Set myrng1 = Range("B3:" & Cells(LastRow, 2).Address(rowabsolute:=False, columnabsolute:=False)) 
    Set myrng2 = Range("D3:" & Cells(LastRow, 4).Address(rowabsolute:=False, columnabsolute:=False)) 

    With ThisWorkbook 
     .Names("Range1").Delete 
     .Names("Range2").Delete 
     .Names.Add "Range1", myrng1 
     .Names.Add "Range2", myrng2 
     .Sheets("Sheet1").Range("B15:B" & LastRow + 5).Formula = "=SUMIF(Range1,RC[-1],Range2)" 
    End With 
End Sub 
0

Надеюсь, это уже разрешено для вас. Если это не так, ошибка возникает из .range не распознается. Если активирующая рабочая книга вас не беспокоит, вы можете попробовать следующее:

Sub InventorySummerise() 
Dim wtb As Workbook 
Dim LastRow As Long 
Set wtb = ThisWorkbook 
LastRow = Cells(Rows.Count, "B").End(xlUp).Row 
Set myrng1 = Range("B3:" & Cells(LastRow, 2).Address(rowabsolute:=False, columnabsolute:=False)) 
Set myrng2 = Range("D3:" & Cells(LastRow, 4).Address(rowabsolute:=False, columnabsolute:=False)) 
Cells(LastRow + 5, 2).Select 
wtb.Activate 
With Sheets("Sheet1") 
.Range("B15:B" & LastRow).Formula = "=SUMIF(" & myrng1.Address & ",1," & myrng2.Address & ")" 
End With 
End Sub