2013-06-24 2 views
0

Я только недавно начал использовать VBA и, следовательно, совсем не знаком со многими командами.Excel VBA - заполняющий стол из разных woorkbooks через vlookup

Ниже приведен мой код, который должен быть достаточно понятным.

Но, как представляется, проблема с следующей строки:

Range("B4").Formula = "=index(C5:AV51,1,column(ActiveCell)-2)"

Что может быть не так?

Private Sub Worksheet_Change(ByVal Target As Range) 
Application.EnableEvents = False 

For Each Cell In Range("C6:AV51") 
Range("B4").Formula = "=index(C5:AV51,1,column(ActiveCell)-2)" 

    If ActiveCell.Row - ActiveCell.Column < 3 Then 
     ActiveCell.Formula = "=vlookup(index(B5:AV51,row()-4,1),'[" & Range("B4").Value & ".xlsx]Sheet1'!A1:E70,4,false)" 

    ElseIf ActiveCell.Row - ActiveCell.Column = 3 Then 
     ActiveCell.Value = "" 
    Else 
     ActiveCell.Formula = "=vlookup(index(B5:AV51,row()-4,1),'[" & Range("B4").Value & ".xlsx]Sheet1'!A1:E70,5,false)" 
    End If 
Next 
    Application.EnableEvents = True  
End Sub 

ответ

1

ActiveCell является объектом, поэтому заменить все экземпляры

range("activecell") 

с

ActiveCell 

Пример

if range("activecell").row - range("activecell").column < 3 then 

становится

if ActiveCell.row - ActiveCell.column < 3 then 

другая ошибка, изменение:

range("B4").formula = "=index(C5:AV51,1,column("activecell")-2)" 

к этому

range("B4").formula = "=index(C5:AV51,1," & ActiveCell.Column & ")-2)" 
+0

Спасибо, что уже улучшение моего кода много. Тем не менее, у меня все еще есть ошибка в этой строке 'else, если ActiveCell.row - ActiveCell.column = 3 then' – jcv

+0

'Elseif' - это одно слово –

+0

Спасибо, код все еще не работает. Я обновил его в своем первом сообщении, если бы вы могли посмотреть :) – jcv

Смежные вопросы