工作表名称为SUB参数与VLOOKUP

问题描述 投票:0回答:2

我对VBA很新,有人可以帮忙吗?

我有下面的代码,我想在不同的表单中从不同的子代表中调用它→所以我给了SHEET_NAME作为这个sub的参数,但是,这不能用于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”是表格的名称 - 它将始终不同

excel vba
2个回答
0
投票

这将公式放在From_Cell上的To_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

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)))"
© www.soinside.com 2019 - 2024. All rights reserved.