Excel - Намерете конкретен номер в списъка?

Проблем

Бих искал да създам макрос в Excel, както следва:
  • Когато щракнете върху командния бутон, трябва да въведете номера в полето за въвеждане.
  • След като въведете номера, той трябва да ни отведе до клетката, която има номера, а последната трябва да бъде запълнена с текущото време.

Шаблонът е както следва:

Когато кликнете върху командата и въведете номера 307304 в полето за въвеждане. тя трябва да ме доведе до конкретната клетка и да бъде уловено началното време. Ако щракна отново, крайният час трябва да бъде заловен. (тези стойности ще се използват за изчисляване на текущото време).

 Служител # Време за край на времето за стартиране

307301

307302

307303

307304

307305

307306

307307

307308

307309

307310

Решение

Опитайте тази. Процедурата за използване е doTimeStamp
  • Идеята е да свържете тази процедура с командния бутон. Когато кликнете върху него, ще попитате за emp id и ще въведете началната дата (ако е празна) или крайната дата (ако е празна) и след това ще ви подкани отново за следващия идентификатор. Тя ще ви помоли за id, докато не въведете празно място и тази точка ще излезе.

 Опция Изрично

Публично под doTimeStamp ()

Дим lRow As Long

Dim sSearchText As String

Dim lEmpID As Long

Dim sTgtSheet As String

'името на листа, където са идентификаторите

sTgtSheet = "Лист1"

правя

sSearchText = InputBox ("Моля, въведете ID на служителя", "Запис на време")

sSearchText = Отрязване (sSearchText)

Ако (sSearchText = vbNullString) _

Тогава

"не са въведени данни. след това се откажете

GoTo Loop_Bottom

Край Ако

Ако не е (IsNumeric (sSearchText)) _

Тогава

"въведеният текст не е числов.

MsgBox "Невалиден идентификатор на служител. Идентификаторът на служителя може да бъде само цифри. Опитайте отново", vbExclamation + vbOK

GoTo Loop_Bottom

Край Ако

Ако (InStr (1, sSearchText, ".")> 0) _

Тогава

"Въведеният текст имаше десетичен знак.

MsgBox "Невалиден идентификатор на служител. Идентификаторът на служителя може да бъде само цифри. Опитайте отново", vbExclamation + vbOK

GoTo Loop_Bottom

Край Ако

"Намерете реда в колона 1

lRow = getItemLocation (sSearchText, Sheets (sTgtSheet) .Колони (1))

Ако (lRow = 0) _

Тогава

"търсенето не върна никакъв удар

MsgBox "ID на служител не е намерен. Опитайте отново", vbInformation + vbOKOnly

GoTo Loop_Bottom

Край Ако

Ако (Листове (sTgtSheet) .Cells (lRow, "B") = vbNullString) _

Тогава

'клетката на намерения ред има празно поле B

Листове (sTgtSheet) .Клетки (lRow, "B") = Сега

ElseIf (Листове (sTgtSheet) .Калони (lRow, "C") = vbNullString) _

Тогава

'клетката на намерения ред има празна колона С

Листове (sTgtSheet) .Клетки (lRow, "C") = Сега

още

в клетката на намерения ред се попълват колони В и С

MsgBox "Начален и краен час вече е записан за служител" & sSearchText, vbInformation + vbOKOnly

Край Ако

Loop_Bottom:

'loop till sSearchText е празна

Цикъл докато (sSearchText vbNullString)

Край Под

Публична функция getItemLocation (sLookFor As String, _

rngSearch As Range, _

Незадължително bFullString As Boolean = True, _

Незадължително bLastOccurance As Boolean = True, _

Незадължително bFindRow Като булева = True) Долу

'За да намерите първия / последния ред / колона в диапазон за определен низ

Тънка област като обхват

Dim iLookAt As Integer

Dim iSearchDir As Integer

Dim iSearchOdr As Integer

Ако (bFullString) _

Тогава

iLookAt = xlWhole

още

iLookAt = xlPart

Край Ако

Ако (bLastOccurance) _

Тогава

iSearchDir = xlPпреди

още

iSearchDir = xlNext

Край Ако

Ако не е (bFindRow) _

Тогава

iSearchOdr = xlByColumns

още

iSearchOdr = xlByRows

Край Ако

С rngSearch

Ако (bLastOccurance) _

Тогава

Задаване на клетка = .Find (sLookFor, .Cells (1, 1), xlValues, iLookAt, iSearchOdr, iSearchDir)

още

Задаване на клетка = .Find (sLookFor, .Cells (.Rows.Count, .Columns.Count), xlValues, iLookAt, iSearchOdr, iSearchDir)

Край Ако

Край с

Ако тогава клетката е нищо

getItemLocation = 0

ElseIf Not (bFindRow) _

Тогава

getItemLocation = Cell.Column

още

getItemLocation = Cell.Row

Край Ако

Задаване на клетка = нищо

Крайна функция

Благодарение на rizvisa1 за този съвет.

Предишна Статия Следваща Статия

Топ Съвети