2016-06-26 131 views
1

所以,現在我有這段代碼來查找哪個人正在登錄,並且在G列中將NOW =()置於每當他們使用用戶表單選擇其名稱時。我遇到的唯一問題是,如果此人以前在工作表中,它會替換所有的G行,而不僅僅是最後一個。我只希望它將now =()函數放在B列中最後一次技術員名稱迭代的G列中。查找列中的最後一個值而不是每個值

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(什麼,之後,看着,注視,SearchOrder,SearchDirection,MatchCase,MatchByte,SearchFormat)

這裏,SearchDirection是一個可選參數,它指定搜索方向,同時在範圍內搜索和c一個取follwing兩個值之一:

  • xlNext - >搜索範圍中的下一個匹配值
  • xlPrevious - >在範圍搜索先前匹配值

這兩個xl下一步是默認值。當你沒有提到它,查找使用xl下一步和搜索從上到下在你的情況下,範圍是一列。所以要得到最後一次出現的字符串使用xlPrevious這將在列中從下到上進行搜索。

+0

雖然上面的答案是絕對正確的,但您仍可能想要添加一些最基本的解釋。代碼中最重要的變化(就我所知)是添加了'SearchDirection:= xlPrevious'(作爲[Range.Find方法]的一部分(https://msdn.microsoft.com/en-us /library/office/ff839746.aspx))。因此,Excel將從最後一行開始逐行搜索,直到找到第一個出現的「strID」(這是列表中的最後一個)。 – Ralph

+0

@Ralph - 解釋補充說,感謝您的反饋意見。 – Mrig

+0

@Josh - 這有幫助嗎? – Mrig

相關問題