Чтобы ответить на основной вопрос, я думаю, что есть проблема с не полностью определенными и / или неправильно заданными диапазонами.
При открытии рабочей книги y она становится активной рабочей книгой.В этот момент Cells(ii,7)
относится к активной рабочей книге (y), поскольку она не полностью квалифицирована, я думаю, вы намереваетесь это указать в рабочей книге x, хотя:
For ii = 2 To endrow
x.Sheets("Sheet1").Cells(ii, 7).Value = Application.WorksheetFunction.VLookup(x.Sheets("Sheet1").Cells(ii, 6), myrange, 2, False)
Next ii
Следующая проблема будетесли VLOOKUP()
выдает ошибку.Вы можете решить эту проблему, поместив vlookup в отдельную функцию:
Private Function vlookup(value As Variant, rng As Range, col As Integer, mode As Boolean)
On Error GoTo uhoh:
vlookup = Application.WorksheetFunction.vlookup(value, rng, col, mode)
Exit Function
uhoh:
vlookup = ""
End Function
Затем вызовите функцию из вашего цикла, и если она не удастся, вы получите пустую строку, а не ошибку:
For ii = 2 To endrow
x.Sheets("Sheet1").Cells(ii, 7).value = vlookup(x.Sheets("Sheet1").Cells(ii, 6), myrange, 2, False)
Next ii
Я бы также исправил несколько других вещей:
Сначала lastrow
и endrow
относятся к одному и тому же диапазону, и вы не изменили размер этого диапазона:
lastrow = x.Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row
endrow = x.Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row
может быть endrow
должен был быть в Рабочей книге у?Если нет, то вы можете просто повторно использовать lastrow
.
Я столкнулся с несколькими проблемами из-за необъявленных переменных (myRange, x), возможно, они включены в код, который вы не предоставили?Я предполагаю, что x является активной книгой.
Мне также пришлось изменить DESPOSITION на Integer.У вас есть String
, но вы устанавливаете его на результат INSTR()
, который имеет тип Integer
.
После исправления этих незначительных проблем вы можете очистить часть кода с помощьюудаление ненужной копировальной пасты.
Здесь есть больше возможностей, но в качестве начального прохода это было бы неплохо:
Sub test()
'DESPOSITION changed to integer
Dim lastrow As Long, Text As String, DESPOSITION As Integer, i As Integer
'I added these, you may already have them in code you didnt share:
Dim x As Workbook
Set x = ThisWorkbook
lastrow = x.Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row
'Just put the value you want directly into Column F, deprecate all the copy/paste stuff.
For i = 2 To lastrow
Text = x.Sheets("Sheet1").Cells(i, 5).value
DESPOSITION = InStr(Text, "DES")
x.Sheets("Sheet1").Cells(i, 6).value = Application.WorksheetFunction.Trim(Left(Text, DESPOSITION - 2))
Next i
x.Save
'Do VLookup to rename Customer name
Dim y As Workbook
Set y = Workbooks.Open("C:\Users\arisarka\Desktop\DATABASE\RemitterVsCustomer.xlsx")
For i = 2 To lastrow
With x.Sheets("Sheet1")
.Cells(i, 7).value = vlookup(.Cells(i, 6), y.Sheets("Sheet1").Range("A:B"), 2, False)
End With
Next i
End Sub
Private Function vlookup(value As Variant, rng As Range, col As Integer, mode As Boolean)
On Error GoTo uhoh:
vlookup = Application.WorksheetFunction.vlookup(value, rng, col, mode)
Exit Function
uhoh:
vlookup = ""
End Function