2017-02-15 5 views
0

У меня есть этот записанный макрос, который я хочу преобразовать в обычный макрокоманду VBA и скопировать формулу от AE2 до последнего.Преобразование записанной формулы VLookUp в R1C1 в формулу VBA с использованием ссылки A1

"=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 

Когда я преобразовал его, он возвращает Object does not support this property or method.

+1

Вы преобразовали RC [-22] в I2, поэтому вам нужно преобразовать остаток таким же образом. Просто следуйте тому же принципу. – SJR

+0

@SJR Итак, мне нужно преобразовать все коды? – ramedju

+0

На самом деле я думаю, что R3uK сделал это за вас. – SJR

ответ

1

Убирал записанный код:

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)" 
+0

Спасибо за подробный ответ. Это заставляет меня больше понимать функцию VLookUp в Excel. :) – ramedju

+2

@ramedju: Смотрите править! Вам даже не пришлось конвертировать формулу, чтобы использовать ее в VBA! ;) – R3uK

+0

@ramedju: Во-первых, вам явно не хватает '.Formula', а затем выстроил его вручную, и вы увидите, что вам нужно иметь как Workbook.FullName (путь + имя), так и имя листа! Попробуйте, и если это не сработает, отправьте новый вопрос, и тогда вы можете вернуться сюда, чтобы совать мне ссылку на новый вопрос! ;) – R3uK

1

Если предположить, что Активное имя листа Sheet1

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

При этом у вас будет только ценность, а не формула! – R3uK

3

Измените свои настройки, чтобы он не использовал формат R1C1, перейдя к (Настройки Excel 2010)/Формулы, а затем сняв отметку с эталонного стиля R1C1. Перезапишите свой макрос, а затем отредактируйте его. У вас не должно быть никаких ссылок «RC», но если вы это сделаете, измените все ссылки, которые имеют «RC» в них, в том же стиле, что и в «I2».