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 starttijd

307.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 Expliciet

Public 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.

Vorige Artikel Volgende Artikel

Top Tips