Excel - Pronađite određeni broj na popisu?

Problem

Želim stvoriti makronaredbu u Excelu kako slijedi:
  • Kada kliknemo gumb naredbe, trebao bi zatražiti unos broja u okvir za unos.
  • Nakon unosa broja treba nas odvesti u ćeliju koja ima broj, a drugi treba popuniti trenutnim vremenom.

Predložak je kao u nastavku:

Kada kliknem Naredba i unesem broj 307304 u okvir za unos. trebala bi me dovesti do određene ćelije, a vrijeme početka treba biti uhvaćeno. Ako ponovno kliknem, završno vrijeme treba uhvatiti. (ove vrijednosti će se koristiti za izračun trenutnog vremena).

 Zaposlenik # Vrijeme početka vremena

307301

307302

307303

307304

307305

307306

307307

307308

307309

307310

Riješenje

Pokušaj ovo. Rutina za korištenje je doTimeStamp
  • Ideja je da ovu rutinu povežete s gumbom za naredbe. Kada kliknete na njega, tražit će emp id i unijet će datum početka (ako je prazan) ili datum završetka (ako je prazan), a zatim će vas ponovno pitati za sljedeći id. Pitat će vas za id dok ne unesete prazno mjesto i ta će točka prestati.

 Opcija Eksplicitna

Javni pod doTimeStamp ()

Dim lRow As Long

Dim sSearchText kao niz

Dim lempID jednako dugo

Dim sTgtSheet As String

'naziv lista na kojem se nalaze ID-ovi

sTgtSheet = "Sheet1"

Čini

sSearchText = InputBox ("Unesite ID zaposlenika", "Snimanje vremena")

sSearchText = Izrezivanje (sSearchText)

Ako (sSearchText = vbNullString) _

Zatim

'nisu uneseni podaci. zatim odustani

GoTo Loop_Bottom

Završi ako

Ako nije (IsNumeric (sSearchText)) _

Zatim

"uneseni tekst nije bio numerički.

MsgBox "Nevažeći ID zaposlenika. ID zaposlenika može biti samo znamenka. Pokušaj ponovno", vbExclamation + vbOKOnly

GoTo Loop_Bottom

Završi ako

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

Zatim

"uneseni tekst imao je decimalni broj.

MsgBox "Nevažeći ID zaposlenika. ID zaposlenika može biti samo znamenka. Pokušaj ponovno", vbExclamation + vbOKOnly

GoTo Loop_Bottom

Završi ako

'pronađite redak u stupcu 1

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

Ako (lRow = 0) _

Zatim

'pretraga nije vratila pogodak

MsgBox "ID zaposlenika nije pronađen. Pokušaj ponovno", vbInformation + vbOKOnly

GoTo Loop_Bottom

Završi ako

Ako (listovi (sTgtSheet) .Cellovi (lRow, "B") = vbNullString) _

Zatim

'ćelija pronađenog retka ima prazan stupac B.

Listovi (sTgtSheet) .Cellovi (lRow, "B") = Sada

ElseIf (Listovi (sTgtSheet) .Cellovi (lRow, "C") = vbNullString) _

Zatim

'ćelija pronađenog retka ima prazan stupac C

Listovi (sTgtSheet) .Cellovi (lRow, "C") = Sada

Drugo

'ćelija pronađenog retka ima ispunjene stupce B i C

MsgBox "Vrijeme početka i završetka je već zabilježeno za zaposlenika" & sSearchText, vbInformation + vbOKOnly

Završi ako

Loop_Bottom:

'loop till sSearchText je prazan

Petlja dok (sSearchText vbNullString)

Kraj pod

Javna funkcija getItemLocation (sLookFor As String, _

rngSearch As Range, _

Neobavezno bFullString kao logičko = True, _

Neobavezno bLastOccurance kao logičko = True, _

Neobavezno bFindRow kao Boolean = Točno)

'Da biste pronašli prvi / zadnji red / stupac unutar raspona za određeni niz

Dim stanica kao domet

Dim iLookAt As Integer

Dim iSearchDir As Integer

Dim iSearchOdr As Integer

Ako (bFullString) _

Zatim

iLookAt = xl Cijela

Drugo

iLookAt = xlPart

Završi ako

Ako (bLastOccurance) _

Zatim

iSearchDir = xlPrethodni

Drugo

iSearchDir = xlNext

Završi ako

Ako nije (bFindRow) _

Zatim

iSearchOdr = xlByColumns

Drugo

iSearchOdr = xlByRows

Završi ako

S rngSearch

Ako (bLastOccurance) _

Zatim

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

Drugo

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

Završi ako

Završi s

Ako je stanica tada ništa

getItemLocation = 0

ElseIf nije (bFindRow) _

Zatim

getItemLocation = Cell.Column

Drugo

getItemLocation = Cell.Row

Završi ako

Postavi ćeliju = ništa

Završna funkcija

Zahvaljujući rizvisa1 za ovaj savjet.

Prethodni Članak Sljedeći Članak

Top Savjeta