एक्सेल - एक मैक्रो एक सूची में एक विशेष संख्या खोजने के लिए
मुद्दा
मैं एक्सेल में एक मैक्रो लिखने की कोशिश कर रहा हूं जो नीचे दिए गए कार्यों को पूरा करना चाहिए:- जब हम कमांड बटन पर क्लिक करते हैं, तो उसे इनपुट बॉक्स में नंबर दर्ज करने के लिए संकेत देना चाहिए।
- नंबर डालने के बाद, यह हमें उस सेल में ले जाना चाहिए, जिसमें नंबर है।
- और वर्तमान सेल को वर्तमान समय से भरा जाना चाहिए।
टेम्प्लेट नीचे दिया गया है:
जब मैं कमांड बटन पर क्लिक करता हूं और इनपुट बॉक्स में 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 = सेल। रो
अगर अंत
सेट सेल = कुछ भी नहीं
अंत समारोह