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 bỏ mật khẩu vào VBAProject để mọi người xem code cua bạn mới phát hiện lỗi mà giúp bạn chứ.
 
Upvote 0
Lỗi này xảy ra khi các kiểu dữ liệu được sử dụng không phù hợp nhau. Ví dụ ta có phép cộng: kiểu chuỗi + kiểu số. Tất nhiên Excel không cộng được và sẽ báo lỗi. Bạn xem thử trong code có bị tình trạng này không?
 
Upvote 0
Sorry sorry, mình quên mất, pass 123. hic. Trong bài của mình không có phép cộng mọi người xem lại cho mính với
 
Upvote 0
Mình đã kiềm tra lại, có phép cộng: SoTT=SoTT+1,....Khi minh chưa làm form tong hop thì vẫn dùng được bình thường, chỉ khi mình tạo xong form tong hop thì bị lỗi, mình đã thừ bỏ from tong hop đi thì lại chạy được bình thường. xem giúp mình nhé.
 
Upvote 0
Có lẽ lỗi xảy ra từ câu này:
Me.sp = Sheet4.Range("W1") + 1
 
Upvote 0
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é
 
Upvote 0
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é

PHP:
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

Me.sp = Sheet4.Range("W1") + 1
Đây là dong code bị sai, chẳng hiểu bạn dùng nó làm gì Sheet4.Range("W1") = "soluong" ?????????????
Hãy kiểm soát code của mình tốt hơn nữa.

Thân!
 

File đính kèm

  • form nhap-OB.rar
    31.1 KB · Đọc: 123
Upvote 0
Mình đã tìm thấy lỗi rồi. khi mình tạo vùng điều kiện lọc thì gán cho W1 giá trị là chữ nên trong phần cập nhật và userform_initilize bị sai dòng lệnh đó. Cảm ơn Mr Okebab và Voda nhé. Mình sẽ cố gắng kiểm soát tốt các dòng lệnh hơn nữa.
 
Upvote 0
'Tim As_max
i1 = dau1
As_max(1) = 0
a = 0
Do While Cells(i1, "A") = Cells(i1 + 1, "A")
i1 = i1 + 1
a = Cells(i1 - 1, "BT")
If As_max(1) < a Then
As_max(1) = a
ii1 = i1 - 1
End If

CÁc bác ơi loi chu mau đo la sao vay
 
Upvote 0
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.
 
Upvote 0

File đính kèm

  • dang lam.xlsm
    335.4 KB · Đọc: 13
Upvote 0
Đ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
 
Upvote 0
Đ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
Vâng để mình thử, cảm ơn bạn nhiều.
 
Upvote 0
Đ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.
 
Upvote 0
Vấn đề không phải là làm được hay không làm được, mà thông tin mà MsgBox (mới thêm vô) sẽ cho bạn là gì & đúng ý đồ của bạn hay không?
. . . .
Form trong khi chưa hoàn chỉnh (do còn lỗi) thì các Control 2uan trọng như Me!txt_row_id không nên dấu đi như vậy.
Bạn phải làm sao đó đển khi bạn chọn 1 dòng trong ListBox của danh sách thì Control này chứa trị là chỉ số dòng của (dòng) dữ liệu đó.
 
Lần chỉnh sửa cuối:
Upvote 0
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.
 
Upvote 0
@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
. . .. . . .

. . . . .
 
Upvote 0
Web KT

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

Back
Top Bottom