我的包含订单的Excel电子表格中的VBA代码存在问题。每行包含一个客户编号,我用它来查找客户电子邮件地址,该编号包含在工作簿的不同工作表中。
vlookup代码适用于单个单元格,但问题是当我尝试遍历电子表格的所有行时。单个单元格的Excel公式例如是
=VLOOKUP(B2,Customers!A2:D1000,4,FALSE)
为此生成的VBA代码是:
Range("M2").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC[-11],Customers!RC[-12]:R[999]C[-9],4,FALSE)"
将其合并到循环中,在选择起始单元格后,我有以下内容:
Cells(2, 13).Select
Do
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-11],Customers!RC[-12]:R[999]C[-9],4,FALSE)"
ActiveCell.Offset(1, 0).Select
Loop Until IsEmpty(ActiveCell.Offset(0, -10))
问题在于我希望“表格数组”固定,而不是相对于正在查找其值的单元格。但我绝对无法弄清楚该怎么做。如果我按如下方式更改代码,则会出现运行时错误:
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC[-11],Customers!A2:D1000,4,FALSE)"
我尝试过引用,取消引用,设置范围变量,使用带有.address的范围变量...有人请帮助吗?
非常感谢你。
答案 0 :(得分:0)
我很确定R1C1公式中的括号表示您正在指定相对范围(尤其是其中的负数)。如果要指定绝对范围,则需要指定R1C1单元格不带括号;例如R2C2:R4C4
举个简单的例子:
Sub test()
Sheet1.Range("C5").FormulaR1C1 = "=VLOOKUP(1,R1C1:R3C3,2,FALSE)"
End Sub
运行它会在单元格C5中为您提供绝对的" A1"风格的公式。
我认为您的问题可能是:
Customers!RC[-12]:R[999]C[-9]
因为它是一个相对范围。您必须明确指定数据表的位置;例如Customers!RC12:R999C9
(您需要弄清楚它在工作表上的位置)。
一种简单的解决方法是在工作表上突出显示数据表,然后切换到Visual Basic编辑器并手动运行(将光标放在Sub中,然后按'播放'按钮或转到Run-> Run)。
Sub test2()
Dim r As Range
Set r = Application.Selection
InputBox "your r1c1 range:", , r.Address(True, True, xlR1C1)
End Sub