2016-06-26 3 views
1

Так что прямо сейчас у меня есть этот код, чтобы найти, кто подпишет, и поместите NOW =() в столбец G всякий раз, когда они используют пользовательскую форму для выбора своего имени. Единственная проблема, с которой я сталкиваюсь, заключается в том, что если человек находится на листе ранее, он заменяет все записи строки G, а не только последнюю. Я только хочу, чтобы она поместила функцию now =() в столбец G последней итерации имени техников в столбце B.Найти последнее значение в столбце вместо каждого значения

Visual of description

Private Sub CommandButton1_Click() 

    Dim rngFound As Range 
    Dim strFirst As String 
    Dim strID As String 
    Dim strDay As String 

    strID = techname1.Value 
    strDay = "" 

    Set rngFound = Columns("B").Find(strID, Cells(Rows.Count, "B"), xlValues, xlWhole) 
    If Not rngFound Is Nothing Then 
     strFirst = rngFound.Address 
     Do 
      Application.Worksheets("SignOut").Cells(rngFound.Row, "G").Value = Now() 
      Set rngFound = Columns("B").Find(strID, rngFound, xlValues, xlWhole) 
     Loop While rngFound.Address <> strFirst 
    End If 

    Set rngFound = Nothing 

    Unload Me 


End Sub 

ответ

2

Чтобы получить последнее появление техников имя вы не должны петли через колонку. Попробуйте ниже код:

Private Sub CommandButton1_Click() 
    Dim rngFound As Range 
    Dim strFirst As String 
    Dim strID As String 
    Dim strDay As String 

    strID = techname1.Value 
    strDay = "" 

    'below line will give you the last occurrence of strID 
    Set rngFound = Columns("B").Find(strID, Cells(Rows.Count, "B"), xlValues, xlWhole, , xlPrevious) 
    If Not rngFound Is Nothing Then 
     Application.Worksheets("SignOut").Cells(rngFound.Row, "G").Value = Now() 
    End If 

    Set rngFound = Nothing 

    Unload Me 
End Sub 

Синтаксис Find функция:

Range_Object.Find (Что, после, Lookin, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)

Здесь SearchDirection - необязательный параметр, указывающий направление поиска при поиске в диапазоне и c принять одно из двух значений follwing:

  • xlNext -> поиск следующего значения соответствия в диапазоне
  • xlPrevious -> Поиск предыдущего значения соответствия в диапазоне

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

+0

Хотя приведенный выше ответ абсолютно правильный, вы все равно можете добавить некоторые минимальные объяснения. Наиболее значительным изменением (насколько я могу судить) в вашем коде является добавление 'SearchDirection: = xlPrevious' (как часть [Range.Find Method] (https://msdn.microsoft.com/en-us /library/office/ff839746.aspx)). Таким образом, Excel будет искать строки за строкой, начиная с самой последней строки и поднимаясь до тех пор, пока не будет найдено первое вхождение 'strID' (которое является последним в списке). – Ralph

+0

@ Ralph - Пояснение добавлено, спасибо за отзыв. – Mrig

+0

@Josh - Помогла ли эта помощь? – Mrig

Смежные вопросы