У меня есть книга с несколькими электронными таблицами. Один из листов называется «Master Filtered», а другой — «MTL OR TOR». Я хочу заполнить столбец K листа «Master filtered» значением поиска из листа «MTL или TOR» во втором столбце. Я написал этот кусок кода, но он не работает.
Sub MTL_OR_TOR()
Dim AcctNb As String
Dim result As String
Worksheets("Master Filtered").Activate
Dim lastrow As Long
lastrow = Cells(Rows.Count, 1).End(xlUp).Row
For G = 4 To lastrow
AcctNb = Cells(G, 3).Value
Set myrange = Worksheets("MTL OR TOR").Range("AA4:AB685") 'Range in which the table MTL or TOR should be entered
result = Application.WorksheetFunction.VLookup(AcctNb, myrange, 2, False)
Range("K" & G).Value = result
Next
End Sub
У вас есть идеи, почему этот код не работает и как это исправить?
Я думал, может быть, моя ошибка в строке, начинающейся с Set myrange= Worksheets("MTL OR TOR")
, но не мог понять.
Что значит не работает? Вы получаете сообщение об ошибке? Если да, то на какой линии?
Он говорит: «Ошибка активного метода класса рабочего листа. И когда я отлаживаю, он выделяет строку «Рабочие листы («Master Filtered»). Активировать»
Добавьте Option Explicit
к очень топ модуля, в котором находится код. Это заставит вас объявлять переменные — прямо сейчас вы не объявляете myrange
, так что я бы по крайней мере добавил Dim myrange as Range
в код. Кроме того, поскольку это статический диапазон (вы его не меняете), я бы Set myrange ...
за пределами цикла For
.
Код находится в модуле или на листе? Если он находится на листе, измените его на модуль
Он уже есть в модуле
Sub MTL_OR_TOR()
' Name your variables in a meaningful way and indicate their type
Dim strAcctNb As String
Dim strResult As String
Dim lngLastRow As Long
Dim lngLoop As Long
Dim rngLookup As Range
'Set your range and variables before you execute the code for readability
Set rngLookup = Worksheets("MTL OR TOR").Range("AA4:AB685") 'Range in which the table MTL or TOR should be entered
'Do not Activate or Select unless you really have to
'Worksheets("Master Filtered").Activate
With Worksheets("Master Filtered")
lngLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
For lngLoop = 4 To lngLastRow
strAcctNb = .Cells(lngLoop, 3).Value
strResult = Application.WorksheetFunction.VLookup(strAcctNb, rngLookup, 2, False)
.Range("K" & lngLoop).Value = strResult
Next
End With
End Sub
С ним не работает. Я пробовал...