Насколько я понимаю цель вашего кода, вы хотите найти строку поиска, введенную в 1-е текстовое поле WN
в столбце A, и записать последующие строки текстового поля DMN
, DWN
и DOE
на заданное смещение в найденной строке.
Некоторые подсказки для нескольких проблем:
- объявляйте все ваши переменные (используйте
Option Explicit
) - используйте полный диапазон ссылки
- , ссылающиеся на рабочие листы, предпочитают коллекцию
Worksheets
, поскольку Sheets
может также включать фигуры - быть строгим в коде отступа, чтобы избежать неправильного
If
.. Else
.. EndIf
конструкций, как вы это сделали (кстати, это вызовет ошибку компиляции) - предусматривают случаи, когда вы не можете найти строку поиска, например, через
If Not FoundCell Is Nothing Then
; это позволяет вам избежать дополнительных проверок, таких как If k = WN.Value Then
, потому что, если вы нашли элемент поиска, он идентичен
Кроме того, я продемонстрировал способ записи всех последующих значений текстового поля с заданным смещением +5 столбцов право на найденную ячейку в столбце A через Array(DMN, DWN, DOE)
одной строкой кода :)
Option Explicit ' declaration head of code module
Private Sub CommandButton1_Click()
' Purpose: find search string of 1st textbox and write subsequent strings to found row
With ThisWorkbook.Worksheets("WATCH LOG") ' use fully qualified range reference
Dim FoundCell As Range
Set FoundCell = .Range("A:A").Find(What:=WN, LookAt:=xlWhole, MatchCase:=False)
If Not FoundCell Is Nothing Then ' search string found
FoundCell.Offset(0, 5).Resize(1, 3) = Array(DMN, DWN, DOE)
Else ' provide for non-results
MsgBox "WATCH NOT FOUND"
End If
End With
End Sub