Lỗi Run-time error '13': Type mismatch

Liên hệ QC

tuanh1979

Thành viên chính thức
Tham gia
7/7/07
Bài viết
57
Được thích
0
Khi mình nhấn vào button Nhap trong sheet chao thì màn hình báo lỗi như trên, mình không tìm được nguyên nhân vì sao. Mọi người chỉ giúp mình nhé. Mình đưa file lên nhờ mọi người xem dùm. Thank
 

File đính kèm

  • form nhap.xls
    97.5 KB · Đọc: 165
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!
cảm ơn bạn đã đọc và ý kiến chân thành của bạn. mình xin nói qua cái Form nhập liệu của mình như thế này.
Ø Với Nút “THÊM” thì thêm mới dữ liệu nhập vào trên các TEXTBOX và tự động nhập xuống hàng dưới.
Ø 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.
Ø Với Nút “RESET”: đưa các textbox về nhập liệu mới.
Ø Với Nút “XÓA DL”: Nhập Tên cần Tìm kiếm hoặc SDT; số CMND , hoặc kích vào listbox nội dung cần xóa và tiến hành bấm nút “XÓA DL”.
Ø Cái đã làm được:
Khi tìm kiếm theo Họ Và Tên Số điện thoại và tìm theo SCMND tất cả các Nút đều không bị lổi.
Ø Cái đang vướng:
Khi nhập chuổi tìm kiếm vào TEXTBOX cần tìm kiếm, 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”).
Mình không phải dân chuyên nên với khả năng của mình chỉ được như vậy mong mọi người giúp đỡ thêm để hoàn thiện.
mình xin chân thành cảm ơn!
Bài đã được tự động gộp:

@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ố TTHọ Và TênMã NVChức DanhNgày SinhGiới TínhSố Đ.ThoạiSố CMND
1phạm văn quốcPVQ00Trưởng Phòng25/09/2012Nam
0963789566​
So CMND
2nguyễn thi thơmNTT00Trưởng Phòng25/09/2012Nu
0899563225​
9999999999​
3nguyễn văn tiNVT00Trưởng Phòng25/09/2012Nam
0325698654​
1234564560​
4nguyễn văn quangNVQ00Trưởng Phòng25/09/2012Nam
56666666666​
55666666666​
5nguyễn văn quangNVQ01Trưởng Phòng25/09/2012Nam
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ã CDChúc danh
GDGiám đốc
TFTrưởng phòng
FFPhó phòng
NVNhân viên
CNcông nhân
FBPhó ban
. . .. . . .

. . . . .
Vâng xin chào bạn!
cảm ơn bạn đã đọc và ý kiến chân thành của bạn. mình xin nói qua cái Form nhập liệu của mình như thế này.
Ø Với Nút “THÊM” thì thêm mới dữ liệu nhập vào trên các TEXTBOX và tự động nhập xuống hàng dưới.
Ø 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.
Ø Với Nút “RESET”: đưa các textbox về nhập liệu mới.
Ø Với Nút “XÓA DL”: Nhập Tên cần Tìm kiếm hoặc SDT; số CMND , hoặc kích vào listbox nội dung cần xóa và tiến hành bấm nút “XÓA DL”.
Ø Cái đã làm được:
Khi tìm kiếm theo Họ Và Tên Số điện thoại và tìm theo SCMND tất cả các Nút đều không bị lổi.
Ø Cái đang vướng:
Khi nhập chuổi tìm kiếm vào TEXTBOX cần tìm kiếm, 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”).
Mình không phải dân chuyên nên với khả năng của mình chỉ được như vậy mong mọi người giúp đỡ thêm để hoàn thiện.
mình xin chân thành cảm ơn!
 

File đính kèm

  • QQQQ.jpg
    QQQQ.jpg
    179.9 KB · Đọc: 8
  • dang lam.xlsm
    349.2 KB · Đọc: 2
  • QQQQ.jpg
    QQQQ.jpg
    179.9 KB · Đọc: 8
  • dang lam.xlsm
    339 KB · Đọc: 0
Upvote 0
. . . . .
Ø 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”).
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;
Nói rõ hơn là bạn đang bắt chương trình lưu dữ liệu từ các TextBox lên dòng nhỏ hơn dòng có chỉ số dòng bằng 1!
 
Upvote 0
Ø 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.
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ênMã NV
Dương Đình ĐứcDFF00
Đỗ PhủFJP00
Đỗ Quốc DungFQD00
nguyễn thi thơmNTT00
Ngô Thành TháiNTT01
nguyễn văn quangNVQ00
nguyễn văn quânNVQ01
Nguyễn Vũ QuíNVQ01
nguyễn văn tiNVT00
Ngô Viết ThạnhNVT01
phạm văn quốcPVQ00
Phan Võ QuânPVQ01
 
Upvote 0
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ênMã NV
Dương Đình ĐứcDFF00
Đỗ PhủFJP00
Đỗ Quốc DungFQD00
nguyễn thi thơmNTT00
Ngô Thành TháiNTT01
nguyễn văn quangNVQ00
nguyễn văn quânNVQ01
Nguyễn Vũ QuíNVQ01
nguyễn văn tiNVT00
Ngô Viết ThạnhNVT01
phạm văn quốcPVQ00
Phan Võ QuânPVQ01
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.
 
Upvote 0
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.
 

File đính kèm

  • GPE.rar
    276.7 KB · Đọc: 11
Upvote 0
Mình xin lưu ý với bạn với câu lệnh này
Mã:
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
Trong tất cả các trường dữ liệu của bạn ta phải phân ra

(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 . . . .
 
Lần chỉnh sửa cuối:
Upvote 0
Mình xin lưu ý với bạn với câu lệnh này
Mã:
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
Trong tất cả các trường dữ liệu của bạn ta phải phân ra

(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 . . . .
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.
 
Upvote 0
Nói về nút 'Thêm mới' của bạn có nội dung:
PHP:
'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

(1) Nếu bạn dời dòng lệnh mang số 18 lên trước dòng lệnh mang số 3 thì các dòng lệnh 4, 7, 10, 13 & 16 sẽ không phải lấy vùng nguyên toàn bộ số dòng trang tính như thế.
Chuyện này không nhỏ vì nó đi suốt trong khi nó tồn tại cùng bạn.

(2) Câu lệnh mang số 3 nên chỉ liệt kê các trường cột sống của CSDL mà thôi; Các trường địa chỉ, SĐT, chức danh,. . . chưa cần đưa làm điều kiện phải nhập đủ ngay từ đầu.

(3) Theo mình, số liệu Ngày-Tháng-Năm nên là MM/DD/yyyy & định dạng trên trang tính để quen mắt là DD/MM/yyyy.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom