Excel - Zoek een bepaald nummer in een lijst?
Kwestie
Ik wil graag macro's maken in Excel, zoals hieronder:- Wanneer we op de opdrachtknop klikken, wordt gevraagd om het nummer in het invoervak in te voeren.
- Na het invoeren van het nummer, moeten we naar de cel gaan die het nummer heeft en de laatste moet worden gevuld met de huidige tijd.
Sjabloon is als volgt:
Wanneer ik op Command druk en het nummer 307304 in het invoervak opvoer. het zou me naar de betreffende cel moeten brengen en de starttijd zou moeten worden vastgelegd. Als ik opnieuw klik, moet de eindtijd worden vastgelegd. (de waarden worden gebruikt om de huidige tijd te berekenen).
Werknemer # Eindtijd starttijd307.301
307.302
307303
307.304
307.305
307.306
307.307
307308
307.309
307.310
Oplossing
Probeer dit. De te gebruiken routine is doTimeStamp- Het idee is dat je deze routine met de opdrachtknop verbindt. Wanneer u hierop klikt, wordt gevraagd om emp id en wordt de startdatum (als deze leeg is) of einddatum (als deze leeg is) ingevoerd en wordt u opnieuw gevraagd naar de volgende id. Het zal je om id vragen totdat je een spatie invoert en op dat punt zal het stoppen.
Optie ExplicietPublic Sub doTimeStamp ()
Dim lRow As Long
Dim sSearchText As String
Dim lEmpID zo lang
Dim sTgtSheet As String
'naam van het blad waar de ID's zijn
sTgtSheet = "Blad1"
Do
sSearchText = InputBox ("Voer de werknemer-ID in", "Tijdregistratie")
sSearchText = Trim (sSearchText)
If (sSearchText = vbNullString) _
Dan
'er zijn geen gegevens ingevoerd. stop dan
GoTo Loop_Bottom
Stop als
If Not (IsNumeric (sSearchText)) _
Dan
'ingevoerde tekst was niet numeriek.
MsgBox "Ongeldige werknemer-ID werknemer-ID kan alleen cijfers zijn." Probeer opnieuw ", vbExclamation + vBOKOnly
GoTo Loop_Bottom
Stop als
If (InStr (1, sSearchText, ".")> 0) _
Dan
'ingevoerde tekst had een decimaal.
MsgBox "Ongeldige werknemer-ID werknemer-ID kan alleen cijfers zijn." Probeer opnieuw ", vbExclamation + vBOKOnly
GoTo Loop_Bottom
Stop als
'zoek de rij in kolom 1
lRow = getItemLocation (sSearchText, Sheets (sTgtSheet) .Columns (1))
If (lRow = 0) _
Dan
'zoekopdracht heeft geen hit opgeleverd
MsgBox "Werknemer ID niet gevonden. Probeer opnieuw", vbInformatie + vBOKOnly
GoTo Loop_Bottom
Stop als
If (Sheets (sTgtSheet) .Cells (lRow, "B") = vbNullString) _
Dan
'cel van de gevonden rij heeft kolom B leeg
Sheets (sTgtSheet). Cell (lRow, "B") = Nu
ElseIf (Sheets (sTgtSheet) .Cells (lRow, "C") = vbNullString) _
Dan
'cel van de gevonden rij heeft kolom C leeg
Sheets (sTgtSheet) .Cells (lRow, "C") = Nu
Anders
'cel van de gevonden rij heeft kolom B en C ingevuld
MsgBox "Start- en eindtijd is al geregistreerd voor werknemer" & sSearchText, vbInformation + vBOKOnly
Stop als
Loop_Bottom:
'loop till sSearchText is leeg
Loop While (sSearchText vbNullString)
End Sub
Openbare functie getItemLocation (sLookFor As String, _
rngSearch As Range, _
Optioneel bFullString als Boolean = True, _
Optioneel bLastOccurance als Boolean = True, _
Optioneel bFindRow als Boolean = True) As Long
'Om de eerste / laatste rij / kolom binnen een bereik voor een specifieke string te vinden
Dim Cell As Range
Dim iLookAt As Integer
Dim iSearchDir As Integer
Dim iSearchOdr As Integer
If (bFullString) _
Dan
iLookAt = xlWhole
Anders
iLookAt = xlPart
Stop als
Als (bLastOccurance) _
Dan
iSearchDir = xlPrevious
Anders
iSearchDir = xlNext
Stop als
If Not (bFindRow) _
Dan
iSearchOdr = xlByColumns
Anders
iSearchOdr = xlByRows
Stop als
Met rngSearch
Als (bLastOccurance) _
Dan
Set Cell = .Find (sLookFor, .Cells (1, 1), xlValues, iLookAt, iSearchOdr, iSearchDir)
Anders
Set Cell = .Find (sLookFor, .Cells (.Rows.Count, .Columns.Count), xlValues, iLookAt, iSearchOdr, iSearchDir)
Stop als
Eindigt met
Als Cel dan niets is
getItemLocation = 0
ElseIf Not (bFindRow) _
Dan
getItemLocation = Cell.Column
Anders
getItemLocation = Cell.Row
Stop als
Cel instellen = niets
Eindfunctie
Dank aan rizvisa1 voor deze tip.