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 vremena307301
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 EksplicitnaJavni 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.