运行时错误5,无效的过程或调用参数

时间:2016-03-22 05:06:57

标签: excel vba excel-vba

我正在尝试在Sheet" Report"中分配Cell E8。具有动态范围的索引匹配公式。范围来自Sheet" Data"

我找到了最后一行(LR)和最后一列(lc)。 运行时错误发生在最后一行:Cell(" E8")。formula =" = ...."

这是代码:

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

有关远离依赖select和activate以实现目标的更多方法,请参阅How to avoid using Select in Excel VBA macros