Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops VBA Excel vlookup循环问题_Loops_Excel_Vlookup_Vba - Fatal编程技术网

Loops VBA Excel vlookup循环问题

Loops VBA Excel vlookup循环问题,loops,excel,vlookup,vba,Loops,Excel,Vlookup,Vba,我在包含订单的excel电子表格中的VBA代码有问题。每行包含一个客户编号,我使用该编号查找客户电子邮件地址,该地址包含在工作簿中的不同工作表中 vlookup代码对于单个单元格工作良好,但问题是当我尝试循环遍历电子表格的所有行时。单个单元格的Excel公式为,例如: =VLOOKUP(B2,Customers!A2:D1000,4,FALSE) 为此生成的VBA代码为: Range("M2").Select ActiveCell.FormulaR1C1 = _ "=VLOOK

我在包含订单的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的范围变量。。。有人能帮忙吗


非常感谢。

我很确定R1C1公式中的括号表示您指定了一个相对范围(尤其是其中的负数)。如果要指定绝对范围,则需要指定不带括号的R1C1单元格;e、 g.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]
因为它是一个相对范围。必须明确指定数据表的位置;e、 g.
客户!RC12:R999C9
(您需要找出它在工作表上的位置)

解决此问题的一种简单方法是在工作表上突出显示数据表,然后切换到Visual Basic编辑器并手动运行(将光标放在子对象中,然后按“播放”按钮或转到“运行”->“运行”)


你是对的,引用确实是相对的,我一直在努力找出如何指定一个绝对范围。谢谢你的评论,我会尝试一下,让你知道进展如何。
Sub test2()
    Dim r As Range
    Set r = Application.Selection
    InputBox "your r1c1 range:", , r.Address(True, True, xlR1C1)
End Sub