„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 pabaiga

307301

307302

307303

307304

307305

307306

307307

307308

307309

307310

Sprendimas

tai. Rutina naudoti doTimeStamp

Idė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

Prisimink tai

Ačiū rizvisa1 už šį patarimą.
Ankstesnis Straipsnis Kitas Straipsnis

Geriausi Patarimai