Несколько советов для вашего кода: Использование
On error Resume Next
, как вы используете, является плохой практикой и может привести к проблемам.У вас могут быть другие ошибки, которые не будут отображаться из-за этого, и это предотвратит их отладку и обнаружение проблемы.Я бы рекомендовал использовать его только перед проблемной строкой, а после этого использовать
On Error goto 0
для возобновления отображения и поиска других возможных ошибок.
Способ полного отказа от использования "On Error"Resume Next »использует оператор« Мне нравится ».Если вы используете
If Sht.Cells(CommentLp, "P") Like "*" & Sht.Cells(wrdLp, "A") & "*" Then
Sht.Cells(CommentLp, "I") = Sht.Cells(CommentLp, "I") & "; " & Sht.Cells(wrdLp, "A")
End If
Вы можете сделать то же самое, не беспокоясь об ошибках.По сути, «Мне нравится» выполняет поиск, чтобы увидеть, похож ли текст на другой.Два «*» означают любой вид и количество символов, поэтому все вместе означает, что Sht.Cells (CommentLp, «P») должны быть похожи: любой тип и количество символов, за которыми следует значение Sht.Cells (wrdLp,«А»), за которым следует любой вид или количество символов.Точно так же, как «Поиск» =)!
Внесение этого изменения также вынудило меня адаптировать способ работы со стартовым символом «;» в вашем коде, но также и к лучшему способу:
Dim wrdLRow As Integer
Dim wrdLp As Integer
Dim CommentLrow As Integer
Dim CommentLp As Integer
Dim fndWord As Integer
Dim DataSht As Worksheet
Dim ListSht as Worksheet
'Define the worksheets
Set DataSht = Sheets("DATA PULL")
Set ListSht = Sheets("LIST")
'Get last row for words based on column A
wrdLRow = ListSht.Cells(Rows.Count, "A").End(xlUp).Row
'Get last row for comments based on column C
CommentLrow = DataSht.Cells(Rows.Count, "P").End(xlUp).Row
For CommentLp = 2 To CommentLrow
For wrdLp = 2 To wrdLRow
If LCASE(DataSht.Cells(CommentLp, "P")) Like "*" & LCASE(ListSht.Cells(wrdLp, "A")) & "*" Then
If DataSht.Cells(CommentLp, "I") <> "" Then
DataSht.Cells(CommentLp, "I") = DataSht.Cells(CommentLp, "I") & "; " & ListSht.Cells(wrdLp, "A")
Else
DataSht.Cells(CommentLp, "I") = ListSht.Cells(wrdLp, "A")
End If
ElseIf LCASE(Sht.Cells(CommentLp, "Q")) Like "*" & LCASE(Sht.Cells(wrdLp, "A")) & "*" Then
If NewSht.Cells(writeRow, "A") <> "" Then
NewSht.Cells(writeRow, "A") = NewSht.Cells(writeRow, "A") & "; " & Sht.Cells(wrdLp, "A")
Else
NewSht.Cells(writeRow, "A") = Sht.Cells(wrdLp, "A")
End If
End If
Next wrdLp
Next CommentLp
Этот код работает для меня без проблем, но ваш тоже.Я предполагаю, что вы не передали весь свой код, также потому что вы упомянули два столбца и написали код только для одного.Я думаю, что проблема может быть в той части, которой вы не поделились, и, возможно, эта модификация, которую я написал, без «On Error Resume Next», поможет вам найти ее!
Я просто надеялся, что не сделалзапутаться с переменными и списком, но я думаю, теперь вы можете иметь хорошее представление о том, что я делаю.Надеюсь, это поможет.