Excel - Eine bestimmte Nummer in einer Liste finden?

Problem

Ich möchte das folgende Makro in Excel erstellen:
  • Wenn Sie auf die Befehlsschaltfläche klicken, müssen Sie die Nummer in das Eingabefeld eingeben.
  • Nach der Eingabe der Nummer sollten wir zu der Zelle mit der Nummer gelangen und diese mit der aktuellen Uhrzeit füllen.

Vorlage ist wie folgt:

Wenn ich auf Befehl klicke und die Nummer 307304 in das Eingabefeld eingebe. es sollte mich zu der bestimmten Zelle bringen und die Startzeit sollte erfasst werden. Wenn ich erneut klicke, sollte die Endzeit erfasst werden. (Diese Werte werden verwendet, um die aktuelle Zeit zu berechnen).

 Mitarbeiter # Startzeit Endzeit

307301

307302

307303

307304

307305

307306

307307

307308

307309

307310

Lösung

Versuche dies. Die zu verwendende Routine ist doTimeStamp
  • Die Idee ist, dass Sie diese Routine mit der Befehlsschaltfläche verbinden. Wenn Sie darauf klicken, werden Sie nach der ID des Empfängers gefragt. Geben Sie das Startdatum (falls leer) oder das Enddatum (falls leer) ein und fordern Sie Sie erneut zur Eingabe der nächsten ID auf. Es fragt Sie nach der ID, bis Sie ein Leerzeichen eingeben, und an diesem Punkt wird es beendet.

 Option explizit

Public Sub doTimeStamp ()

LRow As Long dimmen

Dim sSearchText As String

LEmpID so lange abdunkeln

Dim sTgtSheet As String

'Name des Blattes, in dem sich die IDs befinden

sTgtSheet = "Sheet1"

Tun

sSearchText = InputBox ("Bitte geben Sie die Mitarbeiter-ID ein", "Zeiterfassung")

sSearchText = Trimmen (sSearchText)

If (sSearchText = vbNullString) _

Dann

'Es wurden keine Daten eingegeben. dann hör auf

GoTo Loop_Bottom

End If

Wenn nicht (IsNumeric (sSearchText)) _

Dann

Der eingegebene Text war nicht numerisch.

MsgBox "Ungültige Mitarbeiter-ID. Mitarbeiter-ID kann nur aus Ziffern bestehen. Erneut versuchen", vbExclamation + vbOKOnly

GoTo Loop_Bottom

End If

If (InStr (1, sSearchText, ".")> 0) _

Dann

Der eingegebene Text hatte eine Dezimalstelle.

MsgBox "Ungültige Mitarbeiter-ID. Mitarbeiter-ID kann nur aus Ziffern bestehen. Erneut versuchen", vbExclamation + vbOKOnly

GoTo Loop_Bottom

End If

'Suchen Sie die Zeile in Spalte 1

lRow = getItemLocation (sSearchText, Sheets (sTgtSheet) .Columns (1))

If (lRow = 0) _

Dann

Die Suche ergab keinen Treffer

MsgBox "Mitarbeiter-ID nicht gefunden. Versuchen Sie es erneut", vbInformation + vbOKOnly

GoTo Loop_Bottom

End If

If (Sheets (sTgtSheet) .Cells (lRow, "B") = vbNullString) _

Dann

'Zelle der gefundenen Zeile hat Spalte B leer

Sheets (sTgtSheet) .Cells (lRow, "B") = Now

ElseIf (Sheets (sTgtSheet) .Cells (lRow, "C") = vbNullString) _

Dann

In der Zelle der gefundenen Zeile ist die Spalte C leer

Sheets (sTgtSheet) .Cells (lRow, "C") = Now

Sonst

In der Zelle der gefundenen Zeile sind die Spalten B und C ausgefüllt

MsgBox "Start- und Endzeit wurde bereits für Mitarbeiter aufgezeichnet" & sSearchText, vbInformation + vbOKOnly

End If

Loop_Bottom:

'loop till sSearchText ist ein Leerzeichen

Schleife während (sSearchText vbNullString)

End Sub

Öffentliche Funktion getItemLocation (sLookFor As String, _

rngSearch As Range, _

Optional bFullString As Boolean = True, _

Optional bLastOccurance As Boolean = True, _

Optional bFindRow As Boolean = True) As Long

'Suchen der ersten / letzten Zeile / Spalte innerhalb eines Bereichs für eine bestimmte Zeichenfolge

Zelle als Bereich abdunkeln

ILookAt als Ganzzahl dimmen

ISearchDir als Ganzzahl dimmen

ISearchOdr als Ganzzahl dimmen

If (bFullString) _

Dann

iLookAt = xlWhole

Sonst

iLookAt = xlPart

End If

If (bLastOccurance) _

Dann

iSearchDir = xlPrevious

Sonst

iSearchDir = xlNext

End If

Wenn nicht (bFindRow) _

Dann

iSearchOdr = xlByColumns

Sonst

iSearchOdr = xlByRows

End If

Mit rngSearch

If (bLastOccurance) _

Dann

Set Cell = .Find (sLookFor, .Cells (1, 1), xlValues, iLookAt, iSearchOdr, iSearchDir)

Sonst

Set Cell = .Find (sLookFor, .Cells (.Rows.Count, .Columns.Count), xlValues, iLookAt, iSearchOdr, iSearchDir)

End If

Ende mit

Wenn Zelle dann nichts ist

getItemLocation = 0

Sonst nicht (bFindRow) _

Dann

getItemLocation = Cell.Column

Sonst

getItemLocation = Cell.Row

End If

Setze Zelle = Nichts

Funktion beenden

Danke an rizvisa1 für diesen Tipp.

Vorherige Artikel Nächster Artikel

Top-Tipps