Excel - Cari nombor tertentu dalam senarai?
Isu
Saya ingin mencipta makro dalam Excel seperti di bawah:- Apabila kita mengklik butang arahan, ia perlu meminta nombor memasukkan dalam kotak input.
- Selepas memasukkan nombor itu, ia perlu membawa kami ke sel yang mempunyai nombor dan yang terakhir harus diisi dengan masa semasa.
Templat adalah seperti di bawah:
Apabila saya mengklik Perintah dan masukkan nombor 307304 dalam kotak input. ia harus membawa saya ke sel tertentu dan masa mula harus ditangkap. Jika saya mengklik lagi masa tamat harus ditangkap. (nilai-nilai ini akan digunakan untuk mengira masa semasa).
Pekerja # Mula Masa Akhir Masa307301
307302
307303
307304
307305
307306
307307
307308
307309
307310
Penyelesaian
Cuba ini. Rutin yang digunakan ialah doTimeStamp- Idea ini ialah anda akan menyambungkan rutin ini ke butang arahan. Apabila anda mengklik padanya, ia akan meminta emp id dan akan memasuki tarikh mula (jika kosong) atau tarikh tamat (jika kosong) dan kemudian meminta anda sekali lagi untuk id seterusnya. Ia akan meminta anda untuk id sehingga anda memasukkan kosong dan titik itu akan berhenti.
Pilihan EksplisitPublic Sub doTimeStamp ()
Kurang lRow As Long
Dim sSearchText Sebagai String
Dim lEmpID As Long
Dim sTgtSheet Sebagai String
'nama lembaran di mana id adalah
sTgtSheet = "Sheet1"
Lakukan
sSearchText = InputBox ("Sila Masukkan ID Kakitangan", "Rakaman Masa")
sSearchText = Trim (sSearchText)
Jika (sSearchText = vbNullString) _
Kemudian
'tiada data telah dimasukkan. kemudian berhenti
GoTo Loop_Bottom
Akhir Jika
Jika Tidak (IsNumeric (sSearchText)) _
Kemudian
'teks yang dimasukkan bukan angka.
MsgBox "ID Pekerja Tidak Sah. ID Pekerja hanya boleh angka. Cuba Lagi", vbExclamation + vbOKOnly
GoTo Loop_Bottom
Akhir Jika
Jika (InStr (1, sSearchText, ".")> 0) _
Kemudian
'teks dimasukkan mempunyai perpuluhan.
MsgBox "ID Pekerja Tidak Sah. ID Pekerja hanya boleh angka. Cuba Lagi", vbExclamation + vbOKOnly
GoTo Loop_Bottom
Akhir Jika
'cari baris dalam lajur 1
lRow = getItemLocation (sSearchText, Sheets (sTgtSheet) .Columns (1))
Jika (lRow = 0) _
Kemudian
'Carian tidak dikembalikan
MsgBox "ID Pekerja Tidak Ditemukan. Cuba Lagi", vbInformation + vbOKOnly
GoTo Loop_Bottom
Akhir Jika
Jika (Sheets (sTgtSheet) .Cells (lRow, "B") = vbNullString) _
Kemudian
'sel baris yang terdapat mempunyai lajur B kosong
Helaian (sTgtSheet) .Cells (lRow, "B") = Sekarang
ElseIf (Lembaran (sTgtSheet) .Cells (lRow, "C") = vbNullString) _
Kemudian
'sel baris yang terdapat mempunyai lajur C kosong
Helaian (sTgtSheet) .Cells (lRow, "C") = Sekarang
Lain
'sel baris yang terdapat mempunyai lajur B dan C yang diisi
MsgBox "Masa Mula dan Tamat telah direkodkan untuk Pekerja" & sSearchText, vbInformation + vbOKOnly
Akhir Jika
Loop_Bottom:
'gelung hingga sSearchText kosong
Loop While (sSearchText vbNullString)
Sub Akhir
Fungsi Awas getItemLocation (sLookFor As String, _
rngSearch As Range, _
BFullString Pilihan Sebagai Boolean = Benar, _
Pilihan bLastOccurance Sebagai Boolean = Benar, _
BFindRow Pilihan Sebagai Boolean = Benar) Seperti Panjang
'Untuk mencari baris / lajur / lajur pertama / terakhir dalam julat untuk rentetan tertentu
Dim Cell As Range
Dim iLookAt Sebagai Integer
Dim iSearchDir As Integer
Dim iSearchOdr As Integer
Jika (bFullString) _
Kemudian
iLookAt = xlWhole
Lain
iLookAt = xlPart
Akhir Jika
Jika (bLastOccurance) _
Kemudian
iSearchDir = xlPrevious
Lain
iSearchDir = xlNext
Akhir Jika
Jika Tidak (bFindRow) _
Kemudian
iSearchOdr = xlByColumns
Lain
iSearchOdr = xlByRows
Akhir Jika
Dengan rngSearch
Jika (bLastOccurance) _
Kemudian
Tetapkan Cell =. Cari (sLookFor, .Cells (1, 1), xlValues, iLookAt, iSearchOdr, iSearchDir)
Lain
Tetapkan Sel =. Cari (sLookFor, .Cells (.Rows.Count, .Columns.Count), xlValues, iLookAt, iSearchOdr, iSearchDir)
Akhir Jika
Akhir Dengan
Jika Sel Adakah Tiada Kemudian
getItemLocation = 0
ElseIf Not (bFindRow) _
Kemudian
getItemLocation = Cell.Column
Lain
getItemLocation = Cell.Row
Akhir Jika
Tetapkan Cell = Tiada apa-apa
Fungsi Akhir
Terima kasih kepada rizvisa1 untuk tip ini.