2016-03-22 4 views
1

Я пытаюсь назначить ячейку E8 в листе «Отчет» с формулой соответствия индексов с динамическим диапазоном. Диапазон находится от листа «Данные»Ошибка выполнения 5, неверная процедура или аргумент вызова

Я нашел последнюю строку (LR) и последнюю колонку (lc). Ошибка времени выполнения происходит на последней строке: Cell ("E8") формула = "= ...."

Это код:.

Sub report() 
    Dim LR As Long, lc As Long, first As Long, proxy As String 

    Sheets("Data").Select 

    'Finding the first filled cell by moving down from A1 
    first = Sheets("Data").Range("A1").End(xlDown).Row 

    'The first row has column headers: Name, ID number, etc... SO I assign it to the next row where the first data entry is 
    first = first + 1 

    LR = Sheets("Data").Range("A" & first).End(xlDown).Row 
    lc = Sheets("Data").Range("A" & first).End(xlToRight).Column 

    Sheets("Report").Select 
    proxy = "=IFERROR(INDEX(Data!$A$10:" & Cells(LR, lc).Address & ",MATCH(Report!$C$3,Data!$A$10:" & Cells(LR, 1).Address & ",0),MATCH(Report!$C8,Data!A$9:" & Cells(9, lc).Address & ",0)),'N/A')" 

    Cells("E8").Formula = proxy 
End Sub 
+0

Если это не будет 'Data $ A $ "и первый и ":" & ... 'вместо' Data $ A $ 10:" & ...'? – Jeeped

ответ

0

Вы используете одиночные кавычки, чтобы обернуть 'N/A'. Вам нужны двойные кавычки, и поскольку они являются кавычками в цитируемой строке, вам нужно их удвоить. Кроме того, Range.Cells property не принимает тот же стиль ссылок на ячейки, что и Range object.

proxy = "=IFERROR(INDEX(Data!$A$10:" & Cells(LR, lc).Address & _ 
       ",MATCH(Report!$C$3,Data!$A$10:" & Cells(LR, 1).Address & _ 
       ",0),MATCH(Report!$C8,Data!A$9:" & Cells(9, lc).Address & _ 
       ",0)),""N/A"")" 
Sheets("Report").Select 
Range("E8").Formula = proxy 

Вот быстрый переписывают, который получает от использования Worksheet.Select метода ¹ и неявное ActiveSheet property.

Sub report() 
    Dim lr As Long, lc As Long, first As Long, proxy As String 

    With Worksheets("Data") 

     'Finding the first filled cell by moving down from A1 
     first = .Range("A1").End(xlDown).Row 

     'The first row has column headers: Name, ID number, etc... SO I assign it to the next row where the first data entry is 
     first = first + 1 

     lr = .Range("A" & first).End(xlDown).Row 
     lc = .Range("A" & first).End(xlToRight).Column 

    End With 

    proxy = "=IFERROR(INDEX(Data!$A$10:" & Cells(lr, lc).Address & _ 
        ",MATCH(Report!$C$3,Data!$A$10:" & Cells(lr, 1).Address & _ 
        ",0),MATCH(Report!$C8,Data!A$9:" & Cells(9, lc).Address & _ 
        ",0)),""NA"")" 

    With Worksheets("Report") 
     .Range("E8").Formula = proxy 
     'alternate with .Cells as one of these 
     '.Cells(8, "E").Formula = proxy 
     '.Cells(8, 5).Formula = proxy 
    End With 
End Sub 

См How to avoid using Select in Excel VBA macros для более методов на получение от полагаться на выбор и активировать для достижения ваших целей.

+0

Ячейки («E8») должны быть заменены диапазоном, так как это кажется ошибкой надзора. – Sixthsense

+0

Спасибо, что поймал этот шестой. Я планировал вернуться к коду для быстрого переписывания и упомянул только Cells/Range в своем рассказе, не изменив его в коде. – Jeeped

1
Sub report() 
    Dim LR As Long, lc As Long, first As Long, proxy As String 

    With Sheets("Data") 
     'Finding the first filled cell by moving down from A1 
     first = .Range("A1").End(xlDown).Row 

     'The first row has column headers: Name, ID number, etc... SO I assign it to the next row where the first data entry is 
     first = first + 1 

     LR = .Range("A" & Rows.Count).End(xlUp).Row 
     lc = .Range("A" & first - 1).End(xlToRight).Column 
    End With 

    proxy = "=IFERROR(INDEX(Data!$A$10:" & Cells(LR, lc).Address & ",MATCH(Report!$C$3,Data!$A$10:" & Cells(LR, 1).Address & ",0),MATCH(Report!$C8,Data!A$9:" & Cells(9, lc).Address & ",0)),""N/A"")" 
    Sheets("Report").Range("E8").Formula = proxy 
End Sub 
Смежные вопросы