Excel 使用A1参考将R1C1中记录的VLookUp公式转换为VBA公式

Excel 使用A1参考将R1C1中记录的VLookUp公式转换为VBA公式,excel,vba,excel-formula,Excel,Vba,Excel Formula,我有一个录制的宏,我想将其转换为普通VBA宏代码,并将公式从AE2复制到lastrow "=VLOOKUP(RC[-22],'[test.xlsx]Sheet3'!C5:C6,2,0)" ' this is from another workbook 正在尝试转换为VBA dim wbSLW as workbook dim wbSLWDir as String wbSLWDir = "C\Documents\test.xlsx" 'this is not the constant direc

我有一个录制的宏,我想将其转换为普通VBA宏代码,并将公式从
AE2
复制到lastrow

"=VLOOKUP(RC[-22],'[test.xlsx]Sheet3'!C5:C6,2,0)" ' this is from another workbook
正在尝试转换为VBA

dim wbSLW as workbook
dim wbSLWDir as String

wbSLWDir = "C\Documents\test.xlsx" 'this is not the constant directory or file name
set wbSLW  = workbooks.open(wbSLWDir)

ThisWorkbook.Activate
With Thisworkbook.Sheets(1)
   .Range("AE2") = "=VLOOKUP(I2," & wbSLW & "!E:F,2,0)" ' error line
end with

转换后,它返回
对象不支持此属性或方法

With ActiveSheet.Range("AE2")
    .FormulaR1C1 = "=VLOOKUP(RC[-22],Temp!C[-30]:C[-29],2,0)"
    .AutoFill Destination:=Range("AE2:AE182"), Type:=xlFillDefault
End With 'ActiveSheet

RC[-22]
指的是一个单元格,该单元格在包含公式的单元格前面22列,这里
AE2
是初始单元格,因此
RC[-22]
=
I2

C[-30]
C[-29]
分别指在包含公式的单元格前30列和29列的列
这里是AE2,所以是C[-30]
=
A
和C[-29]=
B

更改公式:

Sheets(1).Range(perNum & 2).Formula = "=VLOOKUP(I2,Temp!A:B,2,0)"
Sheets(1).Range(perNum & 2).FormulaR1C1 = "=VLOOKUP(RC[-22],Temp!C[-30]:C[-29],2,0)"
或不转换公式:

Sheets(1).Range(perNum & 2).Formula = "=VLOOKUP(I2,Temp!A:B,2,0)"
Sheets(1).Range(perNum & 2).FormulaR1C1 = "=VLOOKUP(RC[-22],Temp!C[-30]:C[-29],2,0)"

已录制代码:

With ActiveSheet.Range("AE2")
    .FormulaR1C1 = "=VLOOKUP(RC[-22],Temp!C[-30]:C[-29],2,0)"
    .AutoFill Destination:=Range("AE2:AE182"), Type:=xlFillDefault
End With 'ActiveSheet

RC[-22]
指的是一个单元格,该单元格在包含公式的单元格前面22列,这里
AE2
是初始单元格,因此
RC[-22]
=
I2

C[-30]
C[-29]
分别指在包含公式的单元格前30列和29列的列
这里是AE2,所以是C[-30]=
A
和C[-29]=
B

更改公式:

Sheets(1).Range(perNum & 2).Formula = "=VLOOKUP(I2,Temp!A:B,2,0)"
Sheets(1).Range(perNum & 2).FormulaR1C1 = "=VLOOKUP(RC[-22],Temp!C[-30]:C[-29],2,0)"
或不转换公式:

Sheets(1).Range(perNum & 2).Formula = "=VLOOKUP(I2,Temp!A:B,2,0)"
Sheets(1).Range(perNum & 2).FormulaR1C1 = "=VLOOKUP(RC[-22],Temp!C[-30]:C[-29],2,0)"

假设活动图纸名称为
Sheet1

ActiveCell.Value = Application.WorksheetFunction.VLookup(Sheets("Sheet1").Range("I2"), Sheets("Temp").Range("A:B"), 2, 0)

假设活动图纸名称为
Sheet1

ActiveCell.Value = Application.WorksheetFunction.VLookup(Sheets("Sheet1").Range("I2"), Sheets("Temp").Range("A:B"), 2, 0)

通过转到(Excel 2010)设置/公式,然后取消选中R1C1参考样式,更改设置,使其不使用R1C1格式。重新录制宏,然后对其进行编辑。您不应该有任何“RC”引用,但如果有,则将所有包含“RC”的引用更改为与“I2”中相同的样式。

通过转到(Excel 2010)设置/公式,然后取消选中R1C1引用样式,更改您的设置,使其不使用R1C1格式。重新录制宏,然后对其进行编辑。您不应该有任何“RC”引用,但如果您这样做了,则将其中包含“RC”的所有引用更改为与“I2”中相同的样式。

如果我理解正确,您希望替换
vba
code:

=VLOOKUP(RC[-22],'[**test.xlsx**]Sheet3'!C5:C6,2,0)
在不更改任何其他代码的情况下执行此操作的最简单方法是:

=VLOOKUP(RC[-22],'[**" & wbSLW.Name & "**]Sheet3'!C5:C6,2,0)

如果我理解正确,您希望替换
vba
code中下一行中工作簿的名称:

=VLOOKUP(RC[-22],'[**test.xlsx**]Sheet3'!C5:C6,2,0)
在不更改任何其他代码的情况下执行此操作的最简单方法是:

=VLOOKUP(RC[-22],'[**" & wbSLW.Name & "**]Sheet3'!C5:C6,2,0)


您将RC[-22]转换为I2,因此必须以相同的方式转换余数。只要遵循同样的原则。@SJR所以我必须转换所有代码?实际上我认为R3uK已经为您完成了。是的,谢谢。明白了:)因为你的
Activecell
AE
,那么
C[-30]:C[-29]
意味着你在
A:B
列中查找。你将RC[-22]转换为I2,所以你必须以同样的方式转换剩余部分。只要遵循同样的原则。@SJR所以我必须转换所有代码?实际上我认为R3uK已经为您完成了。是的,谢谢。明白了:)因为你的
Activecell
AE
,那么
C[-30]:C[-29]
意味着你在
A:B
列中查找。有了它,你只会在那里有值,而不会有公式!有了它,你只会得到其中的值,而不是公式!谢谢你详细的回答。它使我更了解Excel中的
VLookUp
函数。:)@ramedju:看编辑!您甚至不必转换公式就可以在VBA中使用它!;)@ramedju:首先,您显然缺少一个
.Formula
,然后手动构建它,您将看到您需要同时拥有Workbook.FullName(路径+名称)和工作表的名称!试试看,如果它不起作用,发布一个新问题,然后你可以回到这里用新问题的链接戳我!;)它工作了,但打开了一个OpenFile对话框。但是工作簿已经打开,上面问题中的my
wbSLW
变量将打开工作簿。Thanks@ramedju:如我所说,手动构造公式,看看它应该是什么样子!然后使用
wbSLW.FullName
!在这个问题上,我不会对这个新问题作更多的评论。谢谢你的详细回答。它使我更了解Excel中的
VLookUp
函数。:)@ramedju:看编辑!您甚至不必转换公式就可以在VBA中使用它!;)@ramedju:首先,您显然缺少一个
.Formula
,然后手动构建它,您将看到您需要同时拥有Workbook.FullName(路径+名称)和工作表的名称!试试看,如果它不起作用,发布一个新问题,然后你可以回到这里用新问题的链接戳我!;)它工作了,但打开了一个OpenFile对话框。但是工作簿已经打开,上面问题中的my
wbSLW
变量将打开工作簿。Thanks@ramedju:如我所说,手动构造公式,看看它应该是什么样子!然后使用
wbSLW.FullName
!在这个问题上,我不会对这个新问题作更多评论。