Итак, я предскажу, что я все еще новичок в VBA. Я набрал этот код лучше, чем мог, и был горд. Я решил добавить некоторые дополнительные функции. Самой последней функцией, которую я хотел, было собирать определенную информацию при возникновении ошибки и отображать ее в окне сообщения.
Что делает код:
У меня две рабочие тетради. Wkbook1 заполнен тоннами элементов данных, а Wkbook2 является главным списком. Код выполняет поиск первой строки в wkbook1 и выполняет поиск этой фразы в Wkbook2, а затем инициализирует ее слева. Иногда встречаются повторяющиеся элементы, и мой "DO LOOP" позаботится об этом. Моя проблема в том, что не все элементы присутствуют в главном списке, и я должен знать, каких из них нет.
Я настроил его так, чтобы при появлении сообщения об ошибке из-за того, что не удалось найти элемент в главном списке, он перешел к моему обработчику ошибок и сохранил элемент в моей переменной сообщения для последующего использования с окном сообщения. .
Я проверил его в других книгах элементов данных, и, если 0 или 1 элемент не найден, он работает, но если в основном списке не найдено более 1 элемента, он выдает ошибку времени выполнения 91 на втором элемент не найден. Я уверен, что в моем коде есть много критических замечаний, поэтому, пожалуйста, будьте осторожны со мной. Я впервые использую массивы.
Код:
Option Explicit
Sub M2_Name_Finder()
Dim x As String
Dim y As Integer
Dim z As Integer
Dim c As Integer
Dim m As Integer
Dim name As String
Dim rngCopy As Range
Dim numRows As Long
Dim rAddress As String
Dim found(50) As String
Dim previous As String
Dim missingFields As String
Dim message As String
name = "JJP"
Windows("Wbook1").Activate
Range("D3").Select
Set rngCopy = ActiveCell.CurrentRegion
numRows = rngCopy.Rows.Count
For z = 1 To numRows
Windows("Wkbook1").Activate
Range("D3").Select
ActiveCell.Offset(y, 0).Select
x = ActiveCell.Value
If x = vbNullString Or x = " " Then
GoTo Done
End If
If x = previous Then
GoTo Here
End If
previous = ActiveCell.Value
Windows("Wkbook2").Activate
Columns("D:D").Select
On Error GoTo Missing:
Selection.Find(what:=x, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase _
:=False, SearchFormat:=False).Activate
found(c) = ActiveCell.Address
rAddress = ActiveCell.Address
If ActiveCell.Value <> Empty Or ActiveCell.Value <> 0 Then
Do
ActiveCell.Select
ActiveCell.Offset(0, -3).Value = name
c = c + 1
Cells.FindNext(After:=ActiveCell).Activate
found(c) = ActiveCell.Address
Loop While found(c) <> rAddress
End If
Here:
c = 0
y = y + 1
Next z
Missing:
message = message & x
m = m + 1
GoTo Here:
Done: MsgBox "Not found: " & message & vbLf, vbInformation
End Sub