Я пытался собрать электронную таблицу, чтобы отследить несколько действий, используя некоторые макросы, полученные из разных мест, так как я не могу написать свой собственный
У меня 2 проблемы:
Этот макрос выполняет поиск на одном листе и возвращает значение на другом
Dim lngLastRow As Long
Dim wsOutput As Worksheet
Dim wsSource As Worksheet
Application.ScreenUpdating = False
Set wsOutput = Sheets("sheet 1") 'Sheet name for the following VBA to fill in
Set wsSource = Sheets("sheet 2") 'Sheet name containing completed data for VLOOKUP
lngLastRow = wsOutput.Range("A:G").Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
With wsOutput
With .Range("B2:B" & lngLastRow)
.Formula = "=VLOOKUP(C2,'" & CStr(wsSource.Name) & "'!A:G,6,FALSE)"
.Value = .Value 'Convert above formula to a value. Comment out or remove if you want the formula to remain
End With
End With
Set wsOutput = Nothing
Set wsSource = Nothing
Application.ScreenUpdating = True
End Sub
Поэтому я выполняю поиск по столбцу C на листе 1 в таблице на листе 2. Макрос выполняет поиск и возвращает значения в столбце B на листе 1. Макрос делает это для всех значений в столбце C на листе 1.
Проблема: если значение не найдено, возвращается # N / A Как мне избавиться от этого, я не знаю, как использовать iferror в VBA
Я использую тот же макрос, чтобы сделать то же самое, но для 2 других листов, и его вести себя по-разному. На этот раз я смотрю столбец А на листе 1, на листе 2.
Проблема 1: Не работает! Он только ищет первое значение в столбце a и не go просматривает все значения в столбце a, так как я понятия не имею, что я делаю, я пытался изменить значение в «with. Часть «Range», это исправило проблему, но теперь похоже, что она пытается выполнить поиск на 300 ячеек, когда в столбце поиска есть только 17 ячеек со значениями
Я понимаю, что, вероятно, делает Нет смысла, поэтому я прикрепил книгу
https://easyupload.io/eehkw8
Столбец C имеет значение with.range, заданное как C2: C, и проблема заключается в том, что он не выполняет поиск для всего столбца. Colomn D имеет значение with.range, установленное как D30: D, и проблема здесь состоит в том, что он выполняет поиск, даже если нет значения для поиска, он также добавляет # N / A
Изменить добавление второго макроса
Параметр Явный
Sub update_Co1newincidents ()
Dim lngLastRow As Long
Dim wsOutput As Worksheet
Dim wsSource As Worksheet
Application.ScreenUpdating = False
Set wsOutput = Sheets("New tickets") 'Sheet name for the following VBA to fill in
Set wsSource = Sheets("lookup") 'Sheet name containing completed data for VLOOKUP
lngLastRow = wsOutput.Range("C:W").Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
With wsOutput
'Formula for School Name
With .Range("C2:C" & lngLastRow)
.Formula = "=VLOOKUP(A2,'" & CStr(wsSource.Name) & "'!C:W,3,FALSE)"
.Value = .Value 'Convert above formula to a value. Comment out or remove if you want the formula to remain
End With
End With
With wsOutput
'Formula for School Name
With .Range("D2:D30" & lngLastRow)
.Formula = "=VLOOKUP(A2,'" & CStr(wsSource.Name) & "'!C:W,4,FALSE)"
.Value = .Value 'Convert above formula to a value. Comment out or remove if you want the formula to remain
End With
End With
Set wsOutput = Nothing
Set wsSource = Nothing
Application.ScreenUpdating = True
Конец Sub
Это макет листа, который должен искать вывод