我对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”是表格的名称 - 它将始终不同
这将公式放在From_Cell
上的To_Cell
和Sheet_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
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)))"