Екцел - Пронађите одређени број на листи?

Питање

Желим да направим макро у Екцелу као што је приказано испод:
  • Када кликнемо на командно дугме, требало би да унесемо број у поље за унос.
  • Након уноса броја, требало би да нас одведе до ћелије која има број, а други треба да буде попуњен тренутним временом.

Шаблон је као у наставку:

Када кликнем на команду и унесем број 307304 у оквир за унос. требало би да ме доведе у одређену ћелију и да се ухвати почетак времена. Ако поново кликнем, крај времена треба да буде ухваћен. (ове вриједности ће се користити за израчун тренутног времена).

 Запослени # Вријеме почетка времена

307301

307302

307303

307304

307305

307306

307307

307308

307309

307310

Решење

Пробајте ово. Рутина коју треба користити је доТимеСтамп
  • Идеја је да повежете ову рутину са командним дугметом. Када кликнете на њега, питаће се за емп ид и уноси датум почетка (ако је празан) или датум завршетка (ако је празан), а затим вас поново питати за сљедећи ид. Питат ће вас за ид док не унесете празно мјесто и та точка ће престати.

 Оптион Екплицит

Јавни под доТимеСтамп ()

Дим лРов Ас Лонг

Дим сСеарцхТект Ас Стринг

Дим лЕмпИД Ас Лонг

Дим сТгтСхеет Ас Стринг

'име листа где се налазе ИД-ови

сТгтСхеет = "Лист1"

Урадити

сСеарцхТект = ИнпутБок ("Унесите ИД запосленика", "Снимање времена")

сСеарцхТект = Трим (сСеарцхТект)

Ако (сСеарцхТект = вбНуллСтринг) _

Онда

'нису унети подаци. онда престани

ГоТо Лооп_Боттом

Енд Иф

Ако није (ИсНумериц (сСеарцхТект)) _

Онда

"унесени текст није нумерички.

МсгБок "Неважећи ИД запосленика. ИД запосленика може бити само цифара. Пробај поново", вбЕкцламатион + вбОКОнли

ГоТо Лооп_Боттом

Енд Иф

Ако (ИнСтр (1, сСеарцхТект, ".")> 0) _

Онда

'унесени текст је имао децимални број.

МсгБок "Неважећи ИД запосленика. ИД запосленика може бити само цифара. Пробај поново", вбЕкцламатион + вбОКОнли

ГоТо Лооп_Боттом

Енд Иф

'пронађите ред у колони 1

лРов = гетИтемЛоцатион (сСеарцхТект, Схеетс (сТгтСхеет) .Цолумнс (1))

Ако (лРов = 0) _

Онда

'претрага није вратила погодак

МсгБок "ИД запосленика није пронађен. Покушај поново", вбИнформатион + вбОКОнли

ГоТо Лооп_Боттом

Енд Иф

Ако (Листови (сТгтСхеет) .Целлс (лРов, "Б") = вбНуллСтринг) _

Онда

'ћелија пронађеног реда има празну колону Б

Листови (сТгтСхеет) .Целлс (лРов, "Б") = Сада

ЕлсеИф (Листови (сТгтСхеет) .Целлс (лРов, "Ц") = вбНуллСтринг) _

Онда

'ћелија пронађеног реда има празну колону Ц

Листови (сТгтСхеет) .Целлс (лРов, "Ц") = Сада

Елсе

'ћелија пронађеног реда има испуњену колону Б и Ц

МсгБок "Време почетка и завршетка је већ забележено за запосленика" & сСеарцхТект, вбИнформатион + вбОКОнли

Енд Иф

Лооп_Боттом:

'лооп тилл сСеарцхТект је празан

Петља док (сСеарцхТект вбНуллСтринг)

Енд Суб

Јавна функција гетИтемЛоцатион (сЛоокФор Ас Стринг, _

рнгСеарцх Ас Ранге, _

Опционално бФуллСтринг Ас Боолеан = Труе, _

Опционално бЛастОццуранце Ас Боолеан = Труе, _

Опционално бФиндРов Ас Боолеан = Труе) Ас Лонг

'Да бисте лоцирали први / последњи ред / колону унутар опсега за одређени низ

Дим Целл Ас Ранге

Дим иЛоокАт Ас Интегер

Дим иСеарцхДир Ас Интегер

Дим иСеарцхОдр Ас Интегер

Ако (бФуллСтринг) _

Онда

иЛоокАт = клВхоле

Елсе

иЛоокАт = клПарт

Енд Иф

Ако (бЛастОццуранце) _

Онда

иСеарцхДир = клПревиоус

Елсе

иСеарцхДир = клНект

Енд Иф

Ако не (бФиндРов) _

Онда

иСеарцхОдр = клБиЦолумнс

Елсе

иСеарцхОдр = клБиРовс

Енд Иф

Витх рнгСеарцх

Ако (бЛастОццуранце) _

Онда

Сет Целл = .Финд (сЛоокФор, .Целлс (1, 1), клВалуес, иЛоокАт, иСеарцхОдр, иСеарцхДир)

Елсе

Сет Целл = .Финд (сЛоокФор, .Целлс (.Ровс.Цоунт, .Цолумнс.Цоунт), клВалуес, иЛоокАт, иСеарцхОдр, иСеарцхДир)

Енд Иф

Завршити

Ако тада ћелија није ништа

гетИтемЛоцатион = 0

ЕлсеИф Нот (бФиндРов) _

Онда

гетИтемЛоцатион = Целл.Цолумн

Елсе

гетИтемЛоцатион = Целл.Ров

Енд Иф

Сет Целл = Ништа

Енд Фунцтион

Хвала ризвиса1 за овај тип.

Претходни Чланак Sledeći Чланак

Топ Савети