Найдите в столбце значение x и скопируйте данные пользовательской формы в соответствующую строку - PullRequest
0 голосов
/ 14 марта 2020

Я получил приведенный ниже код, который я присвоил k в качестве значения текстового поля, чтобы проверить, что оно работает правильно (кажется, что это так), но все равно отказывается искать в столбце A и просто выполняет аргумент Else.

    Private Sub CommandButton1_Click()

Dim FoundCell As Range
Set FoundCell = Sheets("WATCH LOG").Range("A:A").Find(What:=WN.Value)
    k = FoundCell.Value

If k = WN.Value Then
        j = FoundCell.Row
            Sheets("WATCH LOG").Cells(j, 6).Value = Me.DMN.Value
            Sheets("WATCH LOG").Cells(j, 7).Value = Me.DWN.Value
            Sheets("WATCH LOG").Cells(j, 8).Value = Me.DOE.Value
End If
    Else
    MsgBox "WATCH NOT FOUND"

End Sub

Добавлено примечание из-за комментария:

WN, DMN, DWN и DOE - текстовые поля пользовательской формы.

Ответы [ 2 ]

0 голосов
/ 14 марта 2020

Насколько я понимаю цель вашего кода, вы хотите найти строку поиска, введенную в 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

0 голосов
/ 14 марта 2020

Попробуйте это

Private Sub CommandButton1_Click()

Dim FoundCell As Range
Set FoundCell = Sheets("WATCH LOG").Range("A:A").Find(What:=WN) 'Take away the .Value within the Find
    k = FoundCell.Value

If k = WN.Value Then
        j = FoundCell.Row
            Sheets("WATCH LOG").Cells(j, 6).Value = Me.DMN.Value
            Sheets("WATCH LOG").Cells(j, 7).Value = Me.DWN.Value
            Sheets("WATCH LOG").Cells(j, 8).Value = Me.DOE.Value
End If
    Else
    MsgBox "WATCH NOT FOUND"

End Sub
...