Hỏi về tìm kiếm trong Excel bằng VBA

  • Thread starter ntb_802
  • Ngày gửi
N

ntb_802

Guest
15/11/04
39
1
0
49
Ha Noi
Nhờ các bạn giúp mình với:
Mô tả:
Mình có một CSDL là mã nhân viêntên nhân viên và một số trường dữ liệu khác.
Mình dùng macro viết form nhập dữ liệu nhân viên mới, yêu cầu đặt ra là khi trùng mã nhân viên đang nhập với một người trước đó thì sẽ hiển thị một thông báo là "mã này đã được dùng, vui lòng nhập mã khác cho nhân viên này" và trỏ về ô nhập mã đề nghị đổi mã thì mới nhập tiếp được.
các bạn cao thủ giúp mình với nhé!

Hỏi thêm cách tạo hiệu ứng cho form, tức là khi mở form thì hiện ra theo kiểu nền form rõ dần, nếu đóng form thì mờ dần, mình down a-excel về khi khởi động form đăng nhập của bác Tuan thấy hiệu ứng hay quá nên tò mò, nếu bác phổ biến thì tốt quá hi hi.
 
Khóa học Quản trị dòng tiền
HongViet

HongViet

Cao cấp
10/11/05
286
10
18
Đà nẵng
~ gợi í cùng bạn, sẽ cụ thể sau (nếu bạn OK)!

Mình có một CSDL là mã nhân viên và một số trường dữ liệu khác. yêu cầu đặt ra là khi trùng mã nhân viên đang nhập với một người trước đó
Sub KiemTra()
1 Khai báo 1 biến & gán mã NV mới nhập vô biến;
2 Dò từ đầu đến cuối trường chứa MaNV đến hết theo biến khai báo;
3 /(/ếu gặp thì No OK & ngược lại sẽ OK!
End Sub
Cách khác: Bạn luôn nhập MaNV theo qui luật nhất định tăng dần bắt buộc; Như vậy khi nhập chỉ cần tìm anh cuôi (= fím CTRL + Mũi tên xuống) & tăng thêm 1; /(/hưng nên là chuỗi chứ không nên xài số, vì kí tự & kí số đến >=36 nhưng kí số chỉ có 10 mà thôi! VD:
A001,. . . . . .,A999,B001.. . . . . . .=> :dzo:
 
adam_tran

adam_tran

Guitar inspiration
17/5/05
1,373
36
48
48
Goooogle
Sao không dùng Validation kiểm tra cho đơn giản. Thí dụ trong cột A không được phép nhập mã trùng thì ta nhập biểu thức cho Validation, phần Custom như sau:
=COUNTIF(A:A, A1) <=1
Hoặc chỉ hạn chế trong vòng 500 dòng:
=COUNTIF($A$1:$A$500, A1) <=1

Validation sẽ chạy nhanh hơn nhiều, không phải chạy thủ tục Sheets_Change, 1 thủ tục làm chậm tốc độ tính toán.
 
N

ntb_802

Guest
15/11/04
39
1
0
49
Ha Noi
Cám ơn hai bạn Hong Viet và adam_tran đã giúp đỡ, mình kết hợp cả hai vào một như ở dưới và run ngon lành, một lần nữa cám ơn hai bạn nhé. Sau đây là cách làm rất đơn giản và không tốn bộ nhớ lắm
Ô B1 mình gán công thức "=COUNTIF(ma_nhanvien,c6)"
và chắc là nó chỉ nhận giá trị từ 0 đến số>=1, nếu trùng mã thì sẽ lớn hơn (or =) 1 khi đó thì hiện thông báo không thể nhập được và phải đổi mã, khi không trùng mã thì giá trị tại ô B1 =0 (hoặc nhỏ hơn 1) khi đó nhảy đến chạy đoạn mã nhập liệu tức là cho phép nhập liệu.
Đoạn mã này rất đơn giản mà công dụng lại lớn rất nhiều, các bạn thấy có vấn đề gì không?
Sub nhapdulieu_Click()
Range("b1").Select
'ActiveCell.FormulaR1C1 = "=COUNTIF(ma_nhanvien,R[5]C[1])"
ma = Range("b1").Value
If ma >= 1 Then
MsgBox ("Có mã này rồi, Bạn vui lòng đổi mã để nhập tiếp")
Else
MsgBox ("Bạn có thể nhập được rồi đấy")
'Chèn mã lệnh nhập ở đây
End If
Range("c6").Select
End Sub
 
V

Vu Thi Dieu Thu

Guest
Em thấy mọi người trong diễn đàn nhắc rất nhiều về VBA và Macro trong Excel. Em không biết gì VBA cả. Em có thể tự tham khảo tài liệu nào về VBA để có thể hiểu được và tạo Marco được? Lưu ý em chỉ là nhân viên kế toán bình thường chứ không phải là dân tin học nên đọc sách gì là phù hợp và để có thể hiểu và áp dụng được?
Cám ơn sự chỉ bảo của mọi người.
 
ruadangyeu

ruadangyeu

Guest
30/9/06
143
1
0
Hanoi
my.opera.com
ntb_802 nói:
Cám ơn hai bạn Hong Viet và adam_tran đã giúp đỡ, mình kết hợp cả hai vào một như ở dưới và run ngon lành, một lần nữa cám ơn hai bạn nhé. Sau đây là cách làm rất đơn giản và không tốn bộ nhớ lắm
Ô B1 mình gán công thức "=COUNTIF(ma_nhanvien,c6)"
và chắc là nó chỉ nhận giá trị từ 0 đến số>=1, nếu trùng mã thì sẽ lớn hơn (or =) 1 khi đó thì hiện thông báo không thể nhập được và phải đổi mã, khi không trùng mã thì giá trị tại ô B1 =0 (hoặc nhỏ hơn 1) khi đó nhảy đến chạy đoạn mã nhập liệu tức là cho phép nhập liệu.
Đoạn mã này rất đơn giản mà công dụng lại lớn rất nhiều, các bạn thấy có vấn đề gì không?
Sub nhapdulieu_Click()
Range("b1").Select
'ActiveCell.FormulaR1C1 = "=COUNTIF(ma_nhanvien,R[5]C[1])"
ma = Range("b1").Value
If ma >= 1 Then
MsgBox ("Có mã này rồi, Bạn vui lòng đổi mã để nhập tiếp")
Else
MsgBox ("Bạn có thể nhập được rồi đấy")
'Chèn mã lệnh nhập ở đây
End If
Range("c6").Select
End Sub

Mình thấy bạn lập trình cứng đoạn mã như vậy thì làm sao thực hiện được trong những lần sau
Nhi ma_nhanvien được nhập vào nó sẽ kiểm tra có trùng ô nào trong cột A không và vùng tìm kiếm phải thay đổi sau mỗi lần nhập
Bạn có thể dùng
do while ... loop

Tiểu đệ mạo muội
 

Xem nhiều