代码转换为功能不起作用

时间:2015-01-19 18:40:25

标签: excel excel-vba vba

我创建了一个宏来制作一些vlookups并将值粘贴到另一张纸上。我使用宏录制器生成原始代码,然后尝试对其进行修改,使其成为一个函数,只需指示要查找数据的页面和表3中的范围以粘贴结果。 原始代码:

Sub Look1()
Range("B2").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(C[-1],Sheet4!C:C[3],2,FALSE)"
Range("B2").Select
Selection.AutoFill Destination:=Range("B2:B13531")
Range("B2:B13531").Select
Range("C2").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(C[-2],Sheet4!C[-1]:C[2],3,FALSE)"
Range("C2").Select
Selection.AutoFill Destination:=Range("C2:C13531")
Range("C2:C13531").Select
Range("D2").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(C[-3],Sheet4!C[-2]:C[1],4,FALSE)"
Range("D2").Select
Selection.AutoFill Destination:=Range("D2:D13531")
Range("D2:D13531").Select
Columns("B:D").Select
Selection.Copy
Sheets("Sheet3").Select
Columns("D:F").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Sheets("Sheet2").Select
Range("B2").Select
End Sub

功能尝试(这是不起作用的)。

功能:

Sub Look(Page As Variant, Rango As String)
Range("B2").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(C[-1],Page!C:C[3],2,FALSE)"
Range("B2").Select
Selection.AutoFill Destination:=Range("B2:B13531")
Range("B2:B13531").Select
Range("C2").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(C[-2],Page!C[-1]:C[2],3,FALSE)"
Range("C2").Select
Selection.AutoFill Destination:=Range("C2:C13531")
Range("C2:C13531").Select
Range("D2").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(C[-3],Page!C[-2]:C[1],4,FALSE)"
Range("D2").Select
Selection.AutoFill Destination:=Range("D2:D13531")
Range("D2:D13531").Select
Columns("B:D").Select
Selection.Copy
Sheets("Sheet3").Select
Columns(Rango).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Sheets("Sheet2").Select
Range("B2").Select
End Sub

我将这个函数称为:

Look Sheet5, "G:I"

当我尝试运行它时,我会看到一个文件浏览的弹出窗口,标题为"更新值:Page",显然我做错了更换工作表和范围,但我无法弄清楚它是什么,我的功能不起作用。我要为35页页面执行此代码,所以我宁愿这样做调用函数。

2 个答案:

答案 0 :(得分:0)

您的VLOOKUP中有错误,第一个参数需要是一个单元格,而不是列C[-1]

尝试RC[-1]或类似的

答案 1 :(得分:0)

现在你要插入公式" = VLOOKUP(C [-1],Page!C:C [3],2,FALSE)",这是一个字符串,将会是直接插入细胞。如果要插入正确的工作表名称和范围,则需要将它们连接起来。如下所示:

"=VLOOKUP(C[-1]," & Page & "!" & Range & ", 2, FALSE)"

希望有所帮助。