एक्सेल - एक मैक्रो एक सूची में एक विशेष संख्या खोजने के लिए

मुद्दा

मैं एक्सेल में एक मैक्रो लिखने की कोशिश कर रहा हूं जो नीचे दिए गए कार्यों को पूरा करना चाहिए:
  • जब हम कमांड बटन पर क्लिक करते हैं, तो उसे इनपुट बॉक्स में नंबर दर्ज करने के लिए संकेत देना चाहिए।
  • नंबर डालने के बाद, यह हमें उस सेल में ले जाना चाहिए, जिसमें नंबर है।
  • और वर्तमान सेल को वर्तमान समय से भरा जाना चाहिए।

टेम्प्लेट नीचे दिया गया है:

जब मैं कमांड बटन पर क्लिक करता हूं और इनपुट बॉक्स में 307304 नंबर दर्ज करता हूं। यह मुझे विशेष सेल में ले जाना चाहिए और जहां शुरुआत समय पर कब्जा करना चाहिए। अगर मैं फिर से क्लिक करता हूं तो अंतिम समय पर कब्जा कर लिया जाना चाहिए। (ये समय वर्तमान समय होना चाहिए)।

 कर्मचारी # प्रारंभ समय समाप्ति समय

307, 301

307, 302

307, 303

307, 304

307, 305

307, 306

307, 307

307, 308

307, 309

307, 310

उपाय

यह समझो। उपयोग करने की दिनचर्या doTimeStamp है

विचार यह है कि आप इस रूटीन को कमांड बटन से जोड़ देंगे। जब आप उस पर क्लिक करते हैं, तो वह एम्प आईडी के लिए पूछेगा और प्रारंभ तिथि (यदि यह रिक्त है) या अंतिम तिथि (यदि यह रिक्त है) में भर जाएगा और फिर आपको अगली आईडी के लिए फिर से संकेत देगा। यह आपसे आईडी मांगना जारी रखेगा जब तक कि आप एक रिक्त दर्ज नहीं करते हैं और वह इसे छोड़ देगा।

विकल्प स्पष्ट

सार्वजनिक उप doTimeStamp ()

लंबे समय के रूप में मंद

स्ट्रिंग के रूप में डिम sSearchText

लंबे समय के रूप में मंद

डिम sTgtSheet स्ट्रिंग के रूप में

'शीट का नाम जहां आईडी हैं

sTgtSheet = "Sheet1"

करना

sSearchText = InputBox ("कृपया कर्मचारी आईडी दर्ज करें", "समय रिकॉर्डिंग")

sSearchText = ट्रिम (sSearchText)

यदि (sSearchText = vbNullString) _

फिर

'कोई डेटा दर्ज नहीं किया गया था। फिर छोड़ दिया

GoTo Loop_Bottom

अगर अंत

यदि नहीं (IsNumeric (sSearchText)) _

फिर

'दर्ज किया गया पाठ संख्यात्मक नहीं था।

MsgBox "अमान्य कर्मचारी आईडी। कर्मचारी आईडी केवल अंक हो सकता है। फिर से प्रयास करें", vbExclamation + vbOKOnly

GoTo Loop_Bottom

अगर अंत

यदि (InStr (1, sSearchText, "।")> 0) _

फिर

'पाठ में एक दशमलव था।

MsgBox "अमान्य कर्मचारी आईडी। कर्मचारी आईडी केवल अंक हो सकता है। फिर से प्रयास करें", vbExclamation + vbOKOnly

GoTo Loop_Bottom

अगर अंत

'कॉलम 1 में पंक्ति का पता लगाएं

lRow = getItemLocation (sSearchText, Sheets (sTgtSheet))। कॉलम (1))

यदि (lRow = 0) _

फिर

'खोज कोई हिट नहीं लौटी

MsgBox "कर्मचारी आईडी नहीं मिला। फिर से कोशिश करें", vbInformation + vbOKOnly

GoTo Loop_Bottom

अगर अंत

अगर (चादरें (sTgtSheet) .Cells (lRow, "B") = vbNullingring) _

फिर

'पाया पंक्ति के सेल में कॉलम B खाली है

शीट्स (sTgtSheet) .Cells (lRow, "B") = Now

ElseIf (शीट्स (sTgtSheet) .Cells (lRow, "C") = vbNullString) _

फिर

'मिली हुई पंक्ति के सेल में कॉलम C खाली है

शीट्स (sTgtSheet) .Cells (lRow, "C") = Now

अन्य

'पाया पंक्ति के सेल में कॉलम B और C भरा हुआ है

MsgBox "प्रारंभ और समाप्ति समय पहले से ही कर्मचारी के लिए दर्ज किया गया है" और sSearchText, vbInformation + vbOKOnly

अगर अंत

Loop_Bottom:

'sSearchText तक लूप एक रिक्त है

लूप जबकि (sSearchText vbNullString)

अंत उप

सार्वजनिक समारोह getItemLocation (स्ट्रिंग के रूप में sLookFor, _

रेंज के रूप में rngSearch, _

बूलियन के रूप में वैकल्पिक bFullString = True, _

बूलियन के रूप में वैकल्पिक bLastOccurance = True, _

ऑप्शनल bFindRow अस बुलियन = ट्रू) लॉन्ग

'किसी विशिष्ट स्ट्रिंग के लिए एक सीमा के भीतर पहली / अंतिम पंक्ति / स्तंभ खोजें

मंद सेल रेंज के रूप में

डिगर iLookAt इंटेगर के रूप में

मंद iSearchDir पूर्णांक के रूप में

डिगर iSearchOdr इंटेगर के रूप में

अगर (bFullString) _

फिर

iLookAt = xlWhole

अन्य

iLookAt = xlPart

अगर अंत

अगर (bLastOccurance) _

फिर

iSearchDir = xlPrepret

अन्य

iSearchDir = xlNext

अगर अंत

यदि नहीं (bFindRow) _

फिर

iSearchOdr = xlByColumns

अन्य

iSearchOdr = xlByRows

अगर अंत

RngSearch के साथ

अगर (bLastOccurance) _

फिर

सेट सेल = .Find (sLookFor, .Cells (1, 1), xlValues, iLookAt, iSearchOdr, iSearchDir)

अन्य

सेल सेट करें।

अगर अंत

के साथ समाप्त करना

अगर सेल कुछ भी नहीं है तो

getItemLocation = 0

ElseIf नहीं (bFindRow) _

फिर

getItemLocation = सेल। कॉलम

अन्य

getItemLocation = सेल। रो

अगर अंत

सेट सेल = कुछ भी नहीं

अंत समारोह

ध्यान दें कि

इस टिप के लिए rizvisa1 का धन्यवाद।
पिछला लेख अगला लेख

शीर्ष युक्तियाँ