Lỗi Run-time error '13': Type mismatch (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

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

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

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

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
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
    dang lam.xlsm
    349.2 KB · Đọc: 2
  • QQQQ.jpg
    QQQQ.jpg
    179.9 KB · Đọc: 8
  • dang lam.xlsm
    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

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

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

Back
Top Bottom