„Excel“ - makrokomandas, skirtas rasti tam tikrą skaičių sąraše
Problema
Bandau parašyti „Excel“ makrokomandą, kuri turi atlikti toliau nurodytas funkcijas:- Spustelėję komandų mygtuką, jis turėtų paraginti įvesti numerį įvesties laukelyje.
- Įvedę numerį, jis turėtų nuvesti mus į langelį, kuriame yra numeris.
- ir atitinkama ląstelė turi būti užpildyta dabartiniu laiku.
Šablonas yra toks:
Kai spusteliu komandų mygtuką ir įvesties laukelyje įveskite numerį 307304. jis turėtų nuvažiuoti į tam tikrą ląstelę ir užfiksuoti pradžios laiką. Jei dar kartą spusteliu, pabaigos laikas turi būti užfiksuotas. (šie laikai turėtų būti dabartinis laikas).
Darbuotojo # pradžios laiko pabaiga307301
307302
307303
307304
307305
307306
307307
307308
307309
307310
Sprendimas
tai. Rutina naudoti doTimeStampIdėja yra, kad jūs pridedate šią tvarką prie komandos mygtuko. Kai spustelėsite jį, jis paprašys įvesti ID ir užpildys pradžios datą (jei ji yra tuščia) arba pabaigos datą (jei ji yra tuščia) ir tada vėl paraginsite kitą ID. Ji ir toliau paprašys jūsų, kol įvesite tuščią, ir ta vieta bus baigta.
Galimybė aiški
Viešoji „Sub doTimeStamp“ ()
Matykite ilgą laiką
Dim sSearchText kaip eilutė
„Dim lEmpID As Long“
„Dim sTgtSheet“ kaip eilutė
„lapo, kuriame yra ID, pavadinimas
sTgtSheet = "Lapas1"
Padarykite
sSearchText = InputBox („Įveskite darbuotojo ID“, „Laiko įrašymas“)
sSearchText = Trim (sSearchText)
Jei (sSearchText = vbNullString) _
Tada
„duomenų nebuvo įvesta. tada išeiti
GoTo Loop_Bottom
Baigti Jei
Jei ne (IsNumeric (sSearchText)) _
Tada
„Įvestas tekstas nebuvo skaitinis.
MsgBox "Neteisingas darbuotojų ID. Darbuotojo ID gali būti tik skaitmenys. Bandykite dar kartą", vbExclamation + vbOKOnly
GoTo Loop_Bottom
Baigti Jei
Jei (InStr (1, sSearchText, .))> 0) _
Tada
„įvestas tekstas turėjo dešimtainį skaičių.
MsgBox "Neteisingas darbuotojų ID. Darbuotojo ID gali būti tik skaitmenys. Bandykite dar kartą", vbExclamation + vbOKOnly
GoTo Loop_Bottom
Baigti Jei
„suraskite 1 stulpelio eilutę
lRow = getItemLocation (sSearchText, lapai (sTgtSheet). Kolonos (1))
Jei (lRow = 0) _
Tada
„paieška nepadėjo jokių rezultatų
MsgBox "Darbuotojo ID nerastas. Bandykite dar kartą", vbInformation + vbOKOnly
GoTo Loop_Bottom
Baigti Jei
Jei (lapai (sTgtSheet) .Cells (lRow, "B") = vbNullString) _
Tada
„rastos eilutės ląstelė B tuščia
Lakštai (sTgtSheet) .Žymės (lRow, "B") = Dabar
ElseIf (lapai (sTgtSheet) .Cells (lRow, "C") = vbNullString) _
Tada
rastos eilutės ląstelė tuščia C stulpelyje
Lakštai (sTgtSheet) .Žymės (lRow, "C") = Dabar
Kitas
„rastos eilutės ląstelė yra užpildyta B ir C stulpeliais
„MsgBox“ „Pradžios ir pabaigos laikas jau užfiksuotas„ Darbuotojui “& sSearchText, vbInformation + vbOKOnly
Baigti Jei
Loop_Bottom:
„loop iki sSearchText yra tuščias
Apskritimas (sSearchText vbNullString)
Pabaiga
Viešosios funkcijos getItemLocation (sLookFor kaip String, _
rng Ieškoti kaip diapazonas, _
Neprivaloma bFullString as Boolean = True, _
Neprivaloma bLastOccurance As Boolean = True, _
Neprivaloma bFindRow As Boolean = True)
„suraskite pirmąją / paskutinę eilutę / stulpelį tam tikros eilutės intervale
„Dim Cell Cell“
Dim iLookAt As Integer
Dim iSearchDir As Integer
Dim iSearchOdr As Integer
Jei (bFullString) _
Tada
iLookAt = xlWhole
Kitas
iLookAt = xlPart
Baigti Jei
Jei (bLastOccurance) _
Tada
iSearchDir = xlPrevious
Kitas
iSearchDir = xlNext
Baigti Jei
Jei ne (bFindRow) _
Tada
iSearchOdr = xlByColumns
Kitas
iSearchOdr = xlByRows
Baigti Jei
Su rngSearch
Jei (bLastOccurance) _
Tada
Nustatyti langelį = .Rask (sLookFor, .Cells (1, 1), xlValues, iLookAt, iSearchOdr, iSearchDir)
Kitas
Nustatyti langelį = .Rask (sLookFor, .Cells (.Rows.Count, .Columns.Count), xlValues, iLookAt, iSearchOdr, iSearchDir)
Baigti Jei
Baigti su
Jei ląstelių nėra, tada
getItemLocation = 0
ElseIf Not (bFindRow) _
Tada
getItemLocation = Cell.Column
Kitas
getItemLocation = Cell.Row
Baigti Jei
Nustatyti langelį = Nieko
Pabaigos funkcija