Екцел - Пронађите одређени број на листи?
![](http://img.brin-designs.com/img/games/197/excel-find-particular-number-list.png)
Питање
Желим да направим макро у Екцелу као што је приказано испод:- Када кликнемо на командно дугме, требало би да унесемо број у поље за унос.
- Након уноса броја, требало би да нас одведе до ћелије која има број, а други треба да буде попуњен тренутним временом.
Шаблон је као у наставку:
Када кликнем на команду и унесем број 307304 у оквир за унос. требало би да ме доведе у одређену ћелију и да се ухвати почетак времена. Ако поново кликнем, крај времена треба да буде ухваћен. (ове вриједности ће се користити за израчун тренутног времена).
Запослени # Вријеме почетка времена307301
307302
307303
307304
307305
307306
307307
307308
307309
307310
Решење
Пробајте ово. Рутина коју треба користити је доТимеСтамп- Идеја је да повежете ову рутину са командним дугметом. Када кликнете на њега, питаће се за емп ид и уноси датум почетка (ако је празан) или датум завршетка (ако је празан), а затим вас поново питати за сљедећи ид. Питат ће вас за ид док не унесете празно мјесто и та точка ће престати.
Оптион ЕкплицитЈавни под доТимеСтамп ()
Дим лРов Ас Лонг
Дим сСеарцхТект Ас Стринг
Дим лЕмпИД Ас Лонг
Дим сТгтСхеет Ас Стринг
'име листа где се налазе ИД-ови
сТгтСхеет = "Лист1"
Урадити
сСеарцхТект = ИнпутБок ("Унесите ИД запосленика", "Снимање времена")
сСеарцхТект = Трим (сСеарцхТект)
Ако (сСеарцхТект = вбНуллСтринг) _
Онда
'нису унети подаци. онда престани
ГоТо Лооп_Боттом
Енд Иф
Ако није (ИсНумериц (сСеарцхТект)) _
Онда
"унесени текст није нумерички.
МсгБок "Неважећи ИД запосленика. ИД запосленика може бити само цифара. Пробај поново", вбЕкцламатион + вбОКОнли
ГоТо Лооп_Боттом
Енд Иф
Ако (ИнСтр (1, сСеарцхТект, ".")> 0) _
Онда
'унесени текст је имао децимални број.
МсгБок "Неважећи ИД запосленика. ИД запосленика може бити само цифара. Пробај поново", вбЕкцламатион + вбОКОнли
ГоТо Лооп_Боттом
Енд Иф
'пронађите ред у колони 1
лРов = гетИтемЛоцатион (сСеарцхТект, Схеетс (сТгтСхеет) .Цолумнс (1))
Ако (лРов = 0) _
Онда
'претрага није вратила погодак
МсгБок "ИД запосленика није пронађен. Покушај поново", вбИнформатион + вбОКОнли
ГоТо Лооп_Боттом
Енд Иф
Ако (Листови (сТгтСхеет) .Целлс (лРов, "Б") = вбНуллСтринг) _
Онда
'ћелија пронађеног реда има празну колону Б
Листови (сТгтСхеет) .Целлс (лРов, "Б") = Сада
ЕлсеИф (Листови (сТгтСхеет) .Целлс (лРов, "Ц") = вбНуллСтринг) _
Онда
'ћелија пронађеног реда има празну колону Ц
Листови (сТгтСхеет) .Целлс (лРов, "Ц") = Сада
Елсе
'ћелија пронађеног реда има испуњену колону Б и Ц
МсгБок "Време почетка и завршетка је већ забележено за запосленика" & сСеарцхТект, вбИнформатион + вбОКОнли
Енд Иф
Лооп_Боттом:
'лооп тилл сСеарцхТект је празан
Петља док (сСеарцхТект вбНуллСтринг)
Енд Суб
Јавна функција гетИтемЛоцатион (сЛоокФор Ас Стринг, _
рнгСеарцх Ас Ранге, _
Опционално бФуллСтринг Ас Боолеан = Труе, _
Опционално бЛастОццуранце Ас Боолеан = Труе, _
Опционално бФиндРов Ас Боолеан = Труе) Ас Лонг
'Да бисте лоцирали први / последњи ред / колону унутар опсега за одређени низ
Дим Целл Ас Ранге
Дим иЛоокАт Ас Интегер
Дим иСеарцхДир Ас Интегер
Дим иСеарцхОдр Ас Интегер
Ако (бФуллСтринг) _
Онда
иЛоокАт = клВхоле
Елсе
иЛоокАт = клПарт
Енд Иф
Ако (бЛастОццуранце) _
Онда
иСеарцхДир = клПревиоус
Елсе
иСеарцхДир = клНект
Енд Иф
Ако не (бФиндРов) _
Онда
иСеарцхОдр = клБиЦолумнс
Елсе
иСеарцхОдр = клБиРовс
Енд Иф
Витх рнгСеарцх
Ако (бЛастОццуранце) _
Онда
Сет Целл = .Финд (сЛоокФор, .Целлс (1, 1), клВалуес, иЛоокАт, иСеарцхОдр, иСеарцхДир)
Елсе
Сет Целл = .Финд (сЛоокФор, .Целлс (.Ровс.Цоунт, .Цолумнс.Цоунт), клВалуес, иЛоокАт, иСеарцхОдр, иСеарцхДир)
Енд Иф
Завршити
Ако тада ћелија није ништа
гетИтемЛоцатион = 0
ЕлсеИф Нот (бФиндРов) _
Онда
гетИтемЛоцатион = Целл.Цолумн
Елсе
гетИтемЛоцатион = Целл.Ров
Енд Иф
Сет Целл = Ништа
Енд Фунцтион
Хвала ризвиса1 за овај тип.