工作表名称为SUB参数与VLOOKUP

时间:2018-11-07 12:14:35

标签: excel vba

我对VBA还是很陌生,有人可以帮忙吗?

我有以下代码,我想从不同工作表中的不同子对象调用它,所以我给SHEET_NAME作为该子对象的参数,但是,这不适用于vlookup,至少不是这样。有人可以提出不同的方法来做到这一点吗? 顺便说一句,我不需要单元格中的公式,仅凭价值我就可以了。

Sub ART_R(FROM_CELL, TO_CELL, SHEET_NAME)

Range(FROM_CELL).Select

    ActiveCell.FormulaR1C1 = "=IF(ISERROR(VLOOKUP(RC[-1],SHEET_NAME!C[-12]:C[-11],2,0)),"""",(VLOOKUP(RC[-1],SHEET_NAME!C[-12]:C[-11],2,0)))"

Selection.AutoFill Destination:=Range(FROM_CELL, TO_CELL), Type:=xlFillValues

End Sub

非常感谢!

编辑: 现在看起来像这样:

Sub ART_R(FROM_CELL, TO_CELL, SHEET_NAME)
    Range(FROM_CELL).Select
    ActiveCell.FormulaR1C1 = "=IF(ISERROR(VLOOKUP(RC[-1],"&SHEET_NAME&"!C[-12]:C[-11],2,0)),"""",(VLOOKUP(RC[-1],"&SHEET_NAME&"!C[-12]:C[-11],2,0)))"
    Selection.AutoFill Destination:=Range(FROM_CELL, TO_CELL), Type:=xlFillValues
End Sub

该呼叫应(理想情况下)如下所示:

Call ART_R("M4", "M19", "RPL OC")

其中“ RPL OC”是图纸的名称-它将始终不同

2 个答案:

答案 0 :(得分:0)

Call ART_R(FROM_CELL, TO_CELL, Application.Caller.Worksheet.Name)

以及您的子目录中:

ActiveCell.FormulaR1C1 = "=IF(ISERROR(VLOOKUP(RC[-1],"&SHEET_NAME&"!C[-12]:C[-11],2,0)),"""",(VLOOKUP(RC[-1],"&SHEET_NAME&"!C[-12]:C[-11],2,0)))"

答案 1 :(得分:0)

这会将公式放在From_CellTo_CellSheet_Name之间的每个单元格中。

我看到您在代码中使用=IF(ISERROR..... -这是在Excel 2003及更早版本中执行此操作的方法,2003年之后IFERROR更好。

2007+版本:

Sub Test()

    Art_R "O2", "O23", "RPL OC"

End Sub


Public Sub Art_R(From_Cell As String, To_Cell As String, Sheet_Name As String)

    With ActiveWorkbook.Worksheets(Sheet_Name)
        .Range(From_Cell & ":" & To_Cell).FormulaR1C1 = _
            "=IFERROR(VLOOKUP(RC[-1],'" & Sheet_Name & "'!C[-12]:C[-11],2,0),"""")"
    End With

End Sub  

2003年版本:

Public Sub Art_R(From_Cell As String, To_Cell As String, Sheet_Name As String)

    With ActiveWorkbook.Worksheets(Sheet_Name)
        .Range(From_Cell & ":" & To_Cell).FormulaR1C1 = _
            "=IF(ISERROR(VLOOKUP(RC[-1],'" & Sheet_Name & "'!C[-12]:C[-11],2,0)),"""",VLOOKUP(RC[-1],'" & Sheet_Name & "'!C[-12]:C[-11],2,0))"
    End With

End Sub