I was going to write something like this into the code originally but didn't want to do it without you asking for it
I was actually able to do this by shortening the above code. First off, here's the new code:
Sub UpdateEmployee()
Dim Found As Range, Look As Range
Set Look = Sheets(1).Range("B2")
Set Found = Sheets(2).Columns(2).Find(What:=Look.Text, After:=[B1], LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlColumns, SearchDirection:=xlNext, MatchCase:=False)
If Found Is Nothing Then Set Found = Sheets(2).Range("B1").End(xlDown).Offset(1, 0)
Range(Found.Offset(0, -1), Found.Offset(0, 2)) = Range(Look.Offset(0, -1), Look.Offset(0, 2)).Value
End Sub
I added the line:
If Found Is Nothing Then Set Found = Sheets(2).Range("B1").End(xlDown).Offset(1, 0)
That's saying "If the .Find didn't find anything, then set Found to be the next blank line in column B."
I also changed the lines that update the database to take all 4 cells on the first sheet, and put their values in the second sheet.
So if the employee ID # isn't there it will add it. If it is already there, then this won't really do anything since it's just setting it to the same thing it already was.
This way, the reference Found will either be the existing record, or the next blank entry. And all 4 fields get updated, even if they contain formulas.
Let me know if you need any more updates!