tuanh1979 đã viết:Mình đã thử bỏ hẳn cầu lệnh đó đi nhưng không được, vẫn báo lỗi như vậy bạn a. xem lại cho mình nhé
Private Sub UserForm_Initialize()
On Error Resume Next
Me.SoTT = 1
Call ngaynhap_Change
Sheet2.Select
Range("A1").Offset(Range("K1").Value, 0).Value = Me.sp.Text
Range("A1").Offset(Range("K1").Value, 1).Value = Me.ngaynhap.Text
Range("A1").Offset(Range("K1").Value, 4).Value = Me.SoTT.Text
Me.Inphieu.Enabled = False
Me.CapNhat.Enabled = False
Me.Xoa.Enabled = False
End Sub
cứu em với, em cũng bị lỗi này, các sheet khác chạy form ok, riêng sheet "tuan 40" chạy lõi.
Private Sub img_update_Click()
Dim WS As Worksheet
Set WS = ThisWorkbook.Sheets("DATA")
If Excel.WorksheetFunction.And(Me.txt_hvt.Value <> "", Me.txt_ngaysinh.Value <> "", _
Me.txt_nh.Value <> "", Me.txt_cmnd.Value <> "", Me.txt_nhanvien.Value <> "") Then
MsgBox "Dòng: " & Me.txt_row_id.Value
WS.Range("b" & Me.txt_row_id).Value = Me.txt_hvt.Value
WS.Range("c" & Me.txt_row_id).Value = Me.txt_nhanvien.Value
WS.Range("d" & Me.txt_row_id).Value = Me.txt_chucdanh.Value
WS.Range("e" & Me.txt_row_id).Value = Format(Me.txt_ngaysinh.Value, "dd/mm/yyyy")
' . . . . . . . '
'sau khi nhap du lieu xong ta can phai xoa du lieu nen dung sub Call khoi_tao_du_lieu
Call khoi_tao_du_lieu
MsgBox ("UPDATE du lieu thanh cong")
Else
MsgBox ("Du lieu tren khong UPDATE duoc")
End If
End Sub
Vâng để mình thử, cảm ơn bạn nhiều.Đang báo lỗi chắc do dòng (hàng) cần nạp hay xóa dữ liệu => 0
Bạn thử thế này xem sao:
PHP:Private Sub img_update_Click() Dim WS As Worksheet Set WS = ThisWorkbook.Sheets("DATA") If Excel.WorksheetFunction.And(Me.txt_hvt.Value <> "", Me.txt_ngaysinh.Value <> "", _ Me.txt_nh.Value <> "", Me.txt_cmnd.Value <> "", Me.txt_nhanvien.Value <> "") Then MsgBox "Dòng: " & Me.txt_row_id.Value WS.Range("b" & Me.txt_row_id).Value = Me.txt_hvt.Value WS.Range("c" & Me.txt_row_id).Value = Me.txt_nhanvien.Value WS.Range("d" & Me.txt_row_id).Value = Me.txt_chucdanh.Value WS.Range("e" & Me.txt_row_id).Value = Format(Me.txt_ngaysinh.Value, "dd/mm/yyyy") ' . . . . . . . ' 'sau khi nhap du lieu xong ta can phai xoa du lieu nen dung sub Call khoi_tao_du_lieu Call khoi_tao_du_lieu MsgBox ("UPDATE du lieu thanh cong") Else MsgBox ("Du lieu tren khong UPDATE duoc") End If End Sub
hiii bạn vẫn làm không được bạn ơi, có thể giúp mình hoàn thiện tí không, tìm giá trị trong ws đưa lên textbox sửa rồi up date ok, nhưng khi lấy giá trị từ listbox đưa lên texbox sửa và update lại lổi run time error "13".mình nói rõ là file mình làm có hai cách tìm kiếm, tìm kiếm chính xác theo tên , điện thoại, cmnd thì ok rồi, nhưng tới khi tìm kiếm trong listbox kích chọn đưa lên textbox được tồi nhưng khi sửa xong update bị lỗi, nhờ bạn chỉ giáo giúp ah.cảm ơn bạn trước.Đang báo lỗi chắc do dòng (hàng) cần nạp hay xóa dữ liệu => 0
Bạn thử thế này xem sao:
PHP:Private Sub img_update_Click() Dim WS As Worksheet Set WS = ThisWorkbook.Sheets("DATA") If Excel.WorksheetFunction.And(Me.txt_hvt.Value <> "", Me.txt_ngaysinh.Value <> "", _ Me.txt_nh.Value <> "", Me.txt_cmnd.Value <> "", Me.txt_nhanvien.Value <> "") Then MsgBox "Dòng: " & Me.txt_row_id.Value WS.Range("b" & Me.txt_row_id).Value = Me.txt_hvt.Value WS.Range("c" & Me.txt_row_id).Value = Me.txt_nhanvien.Value WS.Range("d" & Me.txt_row_id).Value = Me.txt_chucdanh.Value WS.Range("e" & Me.txt_row_id).Value = Format(Me.txt_ngaysinh.Value, "dd/mm/yyyy") ' . . . . . . . ' 'sau khi nhap du lieu xong ta can phai xoa du lieu nen dung sub Call khoi_tao_du_lieu Call khoi_tao_du_lieu MsgBox ("UPDATE du lieu thanh cong") Else MsgBox ("Du lieu tren khong UPDATE duoc") End If End Sub
Số TT | Họ Và Tên | Mã NV | Chức Danh | Ngày Sinh | Giới Tính | Số Đ.Thoại | Số CMND | |||||||||||
1 | phạm văn quốc | PVQ00 | Trưởng Phòng | 25/09/2012 | Nam | 0963789566 | So CMND | |||||||||||
2 | nguyễn thi thơm | NTT00 | Trưởng Phòng | 25/09/2012 | Nu | 0899563225 | 9999999999 | |||||||||||
3 | nguyễn văn ti | NVT00 | Trưởng Phòng | 25/09/2012 | Nam | 0325698654 | 1234564560 | |||||||||||
4 | nguyễn văn quang | NVQ00 | Trưởng Phòng | 25/09/2012 | Nam | 56666666666 | 55666666666 | |||||||||||
5 | nguyễn văn quang | NVQ01 | Trưởng Phòng | 25/09/2012 | Nam | 0006666666 | 555555555555 |
Mã CD | Chúc danh | ||||||||||||
GD | Giám đốc | ||||||||||||
TF | Trưởng phòng | ||||||||||||
FF | Phó phòng | ||||||||||||
NV | Nhân viên | ||||||||||||
CN | công nhân | ||||||||||||
FB | Phó ban | ||||||||||||
. . . | . . . . |
Vâng xin chào bạn!Bạn nghĩ là người khác sẽ đoán, sẽ dò tất cả các code của bạn để chỉ ra chỗ sai?
Bạn có thể "giúp" những người muốn giúp bạn. Nếu bạn mô tả: khi hiển thị UserForm thì tôi nhấn cái này ... rồi kích vào chỗ kia ..., sau đó rê rê chuột và xông vào chỗ ấy ... thì thấy kêu là ... Tức chỉ ra các bước thao tác để người khác có cơ hội tạo lại tình huống mà ban gặp phải. Không có cái miêu tả này thì đoán mò và dò hết toàn bộ code?
Tôi không có hứng đoán mò các bước thao tác của bạn nên tôi tự thử như sau: sau khi mở UserForm thì tôi chọn 1 mục trong ListBox -> nhấn nút UPDATE thì có lỗi ở dòng
WS.Range("b" & Me.txt_row_id).Value = Me.txt_hvt.Value
và các dòng tiếp theo.
Rõ ràng nếu các bước thao tác như tôi thực hiện thì ở thời điểm nhấn UPDATE TextBox txt_row_id là RỖNG, tức nếu "ép" thành số thì có nghĩa là 0. Code ở trên "cố" truy cập tới (để thiết lập giá trị) ô "b" & Me.txt_row_id = "b" & "0" = "b0", tức tới ô ở cột B dòng 0. Lỗi là đúng vì bảng tính làm gì có dòng 0.
Hãy tập mô tả vấn đề chính xác, cụ thể. Đừng bắt người khác phải đoán mò, phải "bơi" trong biển code của mình.
Vâng xin chào bạn!@Chủ bài đăng: Nên chú tâm hơn trong việc xây dựng CSDL của bạn, như sau:
Số TT Họ Và Tên Mã NV Chức Danh Ngày Sinh Giới Tính Số Đ.Thoại Số CMND 1 phạm văn quốc PVQ00 Trưởng Phòng 25/09/2012 Nam 0963789566So CMND 2 nguyễn thi thơm NTT00 Trưởng Phòng 25/09/2012 Nu 0899563225 99999999993 nguyễn văn ti NVT00 Trưởng Phòng 25/09/2012 Nam 0325698654 12345645604 nguyễn văn quang NVQ00 Trưởng Phòng 25/09/2012 Nam 56666666666 556666666665 nguyễn văn quang NVQ01 Trưởng Phòng 25/09/2012 Nam 0006666666 555555555555
Thứ nhất: Tên người là danh từ riêng, cần viết bông, hết thảy các từ.
Thứ nhì: Nên có trật tự hơn; Ví dụ Mới sinh ra, người ta đã có ngày sinh & giới tính, khi ấy chưa ai có thể có chức danh;
Thông thường mọi người cần có CNND hay CCCD, còn SĐT thì thường có sau
Thứ ba: Trong 1 cơ sở, số chức danh không nhiều & như thế sẽ dẫn đến việc trong CSDL sẽ trùng lắp nhiều khi nhập các chức danh này; Nếu là mình thì sẽ lập cho nó 1 bảng danh mục để tiện nhiều thứ khi nhập liệu như giảm tính đồ sộ không cần thiết, Sai chính tả ngớ ngẫn khi nhập chức danh,. . . .
Mã CD Chúc danh GD Giám đốc TF Trưởng phòng FF Phó phòng NV Nhân viên CN công nhân FB Phó ban . . . . . . .
. . . . .
Các chúng tôi đã chỉ cho bạn lỗi của 2 macro này là chương trình chưa biết cách tìm đến dòng nào đó trên CSDL để lưu dữ liệu;. . . . .
Ø Cái đang vướng:
. . . . , danh sách hiện lên listbox chọn vào nội dung LISTBOX cần sửa, và sửa nội dung trên TEXTBOX nhưng khi Bấm nút “UPDATE” thì bị lỗi (Run time error “13”) .
Và với nút “XÓA DL” củng bị lổi (Run time error “13”).
Nếu là mình thì mình sẽ không thực hiện việc tìm theo tên người vì 1 số lý do. . . , mà trong đó có lý do về lỗi chính tảØ Với Nút “UPDATE”: Khi cần sửa 1 người nào đó trong danh sách ta có thể
+ Tìm theo tên : nhập Họ Và Tên cần tìm bấm nút tìm “ cái hình nút tìm kiếm” và lấy dữ liệu tên người đó điền vào các textbox sửa nội dung cần sửa như “nội dung sdt; tk ngân hàng, ngày sinh, mã nhân viên….” Rồi sau đó cập nhật.
+ Tìm theo Số điện thoại và tìm theo SCMND củng vậy.
+ với TEXTBOX cần tìm kiếm: Ta nhập nội cần tìm kiếm vào textbox tìm kiếm, thì nội dung cần tìm kiếm sẽ hiện dưới LISTBOX, sau đó kích chọn mục muốn sửa dưới LISTBOX, nội dung LISTBOX cần sửa sẽ cập nhật lên TEXTBOX sau đó sửa nội dung cần sửa và “UPDATE” dữ liệu.
Họ Và Tên | Mã NV | ||||||||||||||
Dương Đình Đức | DFF00 | ||||||||||||||
Đỗ Phủ | FJP00 | ||||||||||||||
Đỗ Quốc Dung | FQD00 | ||||||||||||||
nguyễn thi thơm | NTT00 | ||||||||||||||
Ngô Thành Thái | NTT01 | ||||||||||||||
nguyễn văn quang | NVQ00 | ||||||||||||||
nguyễn văn quân | NVQ01 | ||||||||||||||
Nguyễn Vũ Quí | NVQ01 | ||||||||||||||
nguyễn văn ti | NVT00 | ||||||||||||||
Ngô Viết Thạnh | NVT01 | ||||||||||||||
phạm văn quốc | PVQ00 | ||||||||||||||
Phan Võ Quân | PVQ01 |
Thật cảm ơn bạn, nhưng do tính chất của mỗi công việc nên mình phải thiết lập như vậy, chỉ cần họ đọc họ tên, nếu trùng tên học đọc SCMND, hay SDT thì mình tìm ra người đó ngay, hay nếu người đi làm hộ họ chỉ cần đọc SDT, vì mỗi người chỉ 1 CMND, 1 số Điện thoại chính để liên lạc.Nếu là mình thì mình sẽ không thực hiện việc tìm theo tên người vì 1 số lý do. . . , mà trong đó có lý do về lỗi chính tả
& như vậy càng không thể tìm theo SĐT hay CCCD: Một điều hiễn nhiên là ta có số ĐT hay số CCCD của ai đó là ta đã biết tên (& cả họ) người đó.
& mình sẽ tìm theo mã NV, như cách sau: Tìm theo mã của cá nhân; Ví dụ như bảng dưới đây:
Họ Và Tên Mã NV Dương Đình Đức DFF00 Đỗ Phủ FJP00 Đỗ Quốc Dung FQD00 nguyễn thi thơm NTT00 Ngô Thành Thái NTT01 nguyễn văn quang NVQ00 nguyễn văn quân NVQ01 Nguyễn Vũ Quí NVQ01 nguyễn văn ti NVT00 Ngô Viết Thạnh NVT01 phạm văn quốc PVQ00 Phan Võ Quân PVQ01
Vâng cảm ơn bạn.Bạn thử với nút 'Update' sau khi bấm vô 1 dòng trên ListBox của bạn & sửa 1 vài chi tiết xem sao.
If Excel.WorksheetFunction.And(Me.txt_hvt.Value <> "", Me.txt_ngaysinh.Value <> "", _
Me.txt_nh.Value <> "", Me.txt_cmnd.Value <> "",. . . , Me.txt_nhanvien.Value <> "") Then
Chân thành cảm ơn sự nhiệt tình của bạn rất nhiều, với sự góp ý của bạn mình đã hoàn thành được form nhập liệu của riêng mình, và mình biết mình còn rất nhiều thiếu sót cũng như sự không linh hoạt trong câu lệnh, mong bạn có gì xin giúp đỡ thêm. Chúc bạn sức khỏe thật nhiều để giúp đỡ cho diễn đàn ta ngày còn phát triển.Mình xin lưu ý với bạn với câu lệnh này
Trong tất cả các trường dữ liệu của bạn ta phải phân raMã:If Excel.WorksheetFunction.And(Me.txt_hvt.Value <> "", Me.txt_ngaysinh.Value <> "", _ Me.txt_nh.Value <> "", Me.txt_cmnd.Value <> "",. . . , Me.txt_nhanvien.Value <> "") Then
(a) 1 số trường/cột phải có ngay từ đầu; nếu thiếu nó ta không nên nhập dòng dữ liệu đó, như
[STT], [Mã NV], [Tên NV], [Phái tính], [Ngày sinh]
(b) 1 số trường có thể bổ sung sau, như [CCCD] (do chưa đến tuổi cấp], [Mã số thuế], [Nơi cư ngụ],. . . .
(c) 1 số trường có thể thay đổi, như [Chức vụ], [Đơn vị CT], . . . . .
Trong câu lệnh trích dẫn trên chỉ chứa những trường/cột ghi ở điểm (a) mà thôi;
Nếu không thì bạn tự tìm ra nguyên nhân làm sáng tỏ tiếp đi nha . . . .
'NUT THEM DU LIEU '
Private Sub img_them_Click()
Dim WS As Worksheet: Dim lRow As Long
Set WS = ThisWorkbook.Sheets("DATA")
3 If Excel.WorksheetFunction.And(Me.txt_hvt.Value <> "", Me.txt_ngaysinh.Value <> "", Me.txt_diachi.Value <> "", Me.txt_chucdanh.Value <> "", Me.txt_date_bd.Value <> "", Me.txt_date_kt.Value <> "", Me.txt_nh.Value <> "", Me.txt_luong.Value <> "") Then
If Excel.WorksheetFunction.CountIfs(WS.Range("h:h"), Me.txt_cmnd.Value) > 0 Then
MsgBox ("So CMND da ton tai"): Exit Sub
End If
7 If Excel.WorksheetFunction.CountIfs(WS.Range("c:c"), Me.txt_nhanvien.Value) > 0 Then
MsgBox ("Ma nhan vien da ton tai"): Exit Sub
End If
10 If Excel.WorksheetFunction.CountIfs(WS.Range("g:g"), Me.txt_sdt.Value) > 0 Then
MsgBox ("So Dien Thoai da ton tai")
End If
13 If Excel.WorksheetFunction.CountIfs(WS.Range("i:i"), Me.txt_stk.Value) > 0 Then
MsgBox ("So Tai Khoan Ngan Hang ton tai"): Exit Sub
End If
16 If Excel.WorksheetFunction.CountIfs(WS.Range("k:k"), Me.txt_email.Value) > 0 Then
MsgBox ("Email da ton tai"): Exit Sub
End If
18 lRow = 1 + WS.[B4].End(xlDown).Row 'Gán Vào Tùng Côt Excel: '
WS.Range("b" & lRow).Value = Me.txt_hvt.Value: WS.Range("c" & lRow).Value = Me.txt_nhanvien.Value
WS.Range("d" & lRow).Value = Me.txt_chucdanh.Value
WS.Range("e" & lRow).Value = Format(Me.txt_ngaysinh.Value, "dd/mm/yyyy")
WS.Range("g" & lRow).Value = Me.txt_sdt.Value: WS.Range("f" & lRow).Value = Me.txt_sex.Value
WS.Range("h" & lRow).Value = Me.txt_cmnd.Value: WS.Range("i" & lRow).Value = Me.txt_stk.Value
WS.Range("j" & lRow).Value = Me.txt_nh.Value: WS.Range("L" & lRow).Value = Me.txt_email.Value
WS.Range("K" & lRow).Value = Me.txt_diachi.Value: WS.Range("m" & lRow).Value = Me.txt_luong.Value
WS.Range("n" & lRow).Value = Format(Me.txt_date_bd.Value, "dd/mm/yyyy")
WS.Range("o" & lRow).Value = Format(Me.txt_date_kt.Value, "dd/mm/yyyy")
WS.Range("p" & lRow).Value = Me.txt_img_url.Value
'Sau Khi Nhâp Du Liêu Xong Ta Cân Phai Xóa Du Liêu Nên Dùng Sub Call KhoiTaoDuLieu
Call KhoiTaoDuLieu '? '
MsgBox ("Thêm Thành Công")
Else
MsgBox ("Chua Nhâp Du Du Liêu")
End If
End Sub