Заполните данные в определенном столбце на основе критериев поиска - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь ввести данные через пользовательскую форму, чтобы найти конкретный элемент инвентаризации, а затем найти последнюю пустую строку для ввода данных. Происходит то, что предыдущие данные перезаписываются, а новые данные заполняются под ним. Не найдена последняя строка конкретного столбца.

Private Sub CommandButton1_Click()

Dim ws As Worksheet
Dim iRow As Long
Dim Lastrow As Long
Dim Found As Range

Set ws = Worksheets("Inventory Log")

Lastrow = ws.Range("C:WD").Find("*", , , , xlByRows, xlPrevious).Row


If Me.itemnumber.Value = "" Then
    MsgBox "select item number please"
    Else
        Set Found = ws.Range("C:WD").Find(What:=Me.itemnumber.Value, _
                                                   LookIn:=xlValues, _
                                                   LookAt:=xlWhole, _
                                                  SearchOrder:=xlByRows,_
                                                SearchDirection:=xlNext,_                                                     
                                                 MatchCase:=False)

    If Found Is Nothing Then
               MsgBox "Not found"
    Else
       For iRow = 15 To Lastrow
           ws.Cells(iRow, Found.Column).Value = Me.ponumber.Value
           ws.Cells(iRow, Found.Column).Offset(1, 0).Value = Me.quantity.Value
       Next iRow
    End If
End If


With ws
    .Cells(iRow, Found.Column).Value = "PO#:" & "" & Me.ponumber.Value
    .Cells(iRow, Found.Column).Offset(1, 0).Value = Me.quantity.Value
End With

End Sub

Первая запись работает как следует, но после второй записи предыдущие данные перезаписываются, затем они заносятся в ячейки, которые должны быть, если они находятся в том же столбце. Если это другой столбец, правильные данные заполняются под первой строкой ввода и над ней (см. Рисунок ниже).

enter image description here

1 Ответ

0 голосов
/ 16 июля 2019

Хорошо, после игры я наконец-то заставил ее работать так, как я хочу.Код

Private Sub CommandButton1_Click()

Dim ws As Worksheet
Dim iRow As Long
Dim Lastrow As Long
Dim Found As Range
Dim rangeheader As Range
Dim col As Long

Set rangeheader = Range("8:8")
Set ws = Worksheets("Inventory Log")

With ws
    Set Found = rangeheader.Find(What:=Me.itemnumber.Value, _
                                                   LookIn:=xlValues, _
                                                   LookAt:=xlWhole, _
                                                   SearchOrder:=xlByColumns, _
                                                   SearchDirection:=xlNext, _
                                                   MatchCase:=False)

  If Not Found Is Nothing Then
      col = Found.Column
      Lastrow = Cells(Rows.Count, col).End(xlUp).Row
      For iRow = 15 To Lastrow
          If ws.Cells(iRow, col).Offset(0, 0).Value = "" Then
            ws.Cells(iRow, col).Offset(0, 0).Value = "-------"
            ws.Cells(iRow, col).Offset(1, 0).Value = Me.todaysdate.Value
            ws.Cells(iRow, col).Offset(2, 0).Value = Me.ponumber.Value
            ws.Cells(iRow, col).Offset(3, 0).Value = Me.quantity.Value
          End If
      Next iRow

    Else
      MsgBox "not found"
  End If
End With

With ws
  .Cells(iRow, Found.Column).Offset(0, 0).Value = "-------"
  .Cells(iRow, Found.Column).Offset(1, 0).Value = Me.todaysdate.Value
  .Cells(iRow, Found.Column).Offset(2, 0).Value = "PO#:" & "" & Me.ponumber.Value
  .Cells(iRow, Found.Column).Offset(3, 0).Value = Me.quantity.Value
End With

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...