Cần giúp về Code VBa trong file nhập liệu

Liên hệ QC

DarKLov3

Thành viên chính thức
Tham gia
20/12/10
Bài viết
68
Được thích
22
Qua quá trình mày mò học hỏi, cùng với sự giúp đỡ của các anh chị trên diễn đàn, em đã tạo 1 file nhập dữ liệu phục vụ công việc cũng khá ưng ý. Tuy nhiên hiện nay em muốn thêm một số tính năng để thuận tiện hơn. Cụ thể: Khi nhập dữ liệu vào textbox sẽ kiểm tra dữ liệu đó trong sheet "Bảng tra cứu", nếu đã có thì hiện thông tin tương ứng bên cạnh textbox, nếu chưa có sẽ hiện cảnh báo.
Ví dụ: nhập 1006273 và ô Mã QHNS thì nó check trong Sheet Bảng tra cứu và đưa ra thông tin tương ứng là: Văn phòng Chi cục Kiểm lâm; Còn nếu không có tên tương ứng thì hiện cảnh báo "Mã QHNS không có trong bảng dữ liệu"

Rất mong các anh chị giúp đỡ ak. E xin cám ơn nhiều.
E gửi kèm File dữ liệu và hình ảnh minh họa.
 

File đính kèm

  • Trung_Test.xlsb
    1 MB · Đọc: 10
  • Untitled.png
    Untitled.png
    414.7 KB · Đọc: 50
  • d689405d8e4a7114285b.jpg
    d689405d8e4a7114285b.jpg
    106.3 KB · Đọc: 48
Cụ thể: Khi nhập dữ liệu vào textbox sẽ kiểm tra dữ liệu đó trong sheet "Bảng tra cứu", nếu đã có thì hiện thông tin tương ứng bên cạnh textbox, nếu chưa có sẽ hiện cảnh báo.
Ví dụ: nhập 1006273 và ô Mã QHNS thì nó check trong Sheet Bảng tra cứu và đưa ra thông tin tương ứng là: Văn phòng Chi cục Kiểm lâm; Còn nếu không có tên tương ứng thì hiện cảnh báo "Mã QHNS không có trong bảng dữ liệu"

Bạn đổi qua dùng Combobox đi, nó có đủ các tính năng bạn cần như trên.
- Các thuộc tính MatchEntry, MatchRequired sẽ bẫy lỗi dữ liệu nhập không có trong list của combobox.
- Chọn mã thì sẽ gán tên qua textbox khác thì đơn giản là: Me.Texbox1.Value = Me.ComboBox.Column(1)
Column(1): cột thứ 2 của List combobox. Muốn lấy dữ liệu cột nào thì chọn cột tương ứng.
Việc lấy dữ liệu làm nguồn cho List của combobox thuộc cơ bản, có nhiều trên diễn đàn, bạn tự ngâm cứu.
 
Upvote 0
E đã làm OK rồi nhé các anh chị. cám ơn sự góp ý, giúp đỡ của mọi người
 
Upvote 0
Bạn có thể thêm 1 ListBox, & khi đó, chỉ cần nhập 3 kí số lên TextBox, nếu có (& trùng) thì hiện (hết) lên ListBox để bạn chọn 1 dòng (ListBox)
Nếu không có thì trả lời cho bạn biết;
Chuyện còn lại là trên ListBox bạn cần bao nhiêu cột dữ liệu thì ấn định bấy nhiêu.

Vấn đề ở đây là chỉ cần nhập 3/7 kí số mà thôi
 
Upvote 0
Các thầy giúp em chút ạ. E làm mấy câu để kiểm tra sự phù hợp của dữ liệu ở cột G với Cột C. (Số cột G luôn là nhỏ hơn hoặc bằng số cột C)
Mã:
'bieu 26
    For j = 9 To UBound(dArr2, 2)
        If Sheet2.Cells(j, 7) > Sheet2.Cells(j, 3) Then
            Sheet2.Range(Cells(j, 2), Cells(j, 7)).Interior.ColorIndex = 6
        Else
            Sheet2.Range(Cells(j, 2), Cells(j, 7)).Interior.ColorIndex = 0
        End If
    Next
mà nó chỉ đánh dấu được mấy dòng ở trên, còn các dòng sau thì không đánh dấu màu vàng mặc dù số liệu cũng sai (Số cột G lớn hơn số cột C)

Mong các thầy chỉ giúp e làm sai chỗ nào và cần sửa như nào với ạ.
Untitled.png
 

File đính kèm

  • Tong hop du toan 2021.xlsb
    52.5 KB · Đọc: 7
Lần chỉnh sửa cuối:
Upvote 0
Các thầy giúp em chút ạ. E làm mấy câu để kiểm tra sự phù hợp của dữ liệu ở cột G với Cột C
Mã:
'bieu 26
    For j = 9 To UBound(dArr2, 2)
        If Sheet2.Cells(j, 7) > Sheet2.Cells(j, 3) Then
            Sheet2.Range(Cells(j, 2), Cells(j, 7)).Interior.ColorIndex = 6
        Else
            Sheet2.Range(Cells(j, 2), Cells(j, 7)).Interior.ColorIndex = 0
        End If
    Next
mà nó chỉ đánh dấu được mấy dòng ở trên, còn các dòng sau thì không đánh dấu màu vàng mặc dù số liệu cũng sai.
Mong các thầy chỉ giúp e làm sai chỗ nào và cần sửa như nào với ạ.
View attachment 246738
Tôi không hiểu ý bạn là sai , sai cái gì?
Thấy bạn code khá rồi, học và sử dụng thêm ENUM đi, như thế thay vì cột 2, cột 7 khó hiểu thì chỉ rõ cột jChuyenNguon2019d2020, jChiKHvCN,... thì tiện sửa và đọc code hơn nhiều và nhanh chóng
 
Upvote 0
E đang so sánh số liệu giữa cột 7 và cột 2: Nếu cột 7 lớn hơn cột 2 thì bôi vàng. Nhưng các dòng ở dưới: cột 7 có số, cột 2 không có số mà lại không bôi vàng ạ.
 
Upvote 0
E đang so sánh số liệu giữa cột 7 và cột 2: Nếu cột 7 lớn hơn cột 2 thì bôi vàng. Nhưng các dòng ở dưới: cột 7 có số, cột 2 không có số mà lại không bôi vàng ạ.
Thế thì:
Thử thay đoạn này
Mã:
'kiem tra su phu hop cua so lieu
  '  bieu 26
    For j = 9 To UBound(dArr2, 2)
        If Sheet2.Cells(j, 7) > Sheet2.Cells(j, 3) Then
            Sheet2.Range(Cells(j, 2), Cells(j, 7)).Interior.ColorIndex = 6
        Else
            Sheet2.Range(Cells(j, 2), Cells(j, 7)).Interior.ColorIndex = 0
        End If
    Next

thành đoạn code sau
Mã:
' kiem tra su phu hop cua so lieu
    'bieu 26
    For j = 9 To UBound(dArr2, 2) + 9 - 1
        If Sheet2.Cells(j, 7).Value2 > Sheet2.Cells(j, 3).Value2 Then
            Sheet2.Range(Cells(j, 2), Cells(j, 7)).Interior.ColorIndex = 6
        Else
            Sheet2.Range(Cells(j, 2), Cells(j, 7)).Interior.ColorIndex = 0
        End If
    Next

Nếu không được, thì thay thử lại thành đoạn sau
Mã:
' kiem tra su phu hop cua so lieu
    'bieu 26
    For j = 9 To UBound(dArr2, 2) + 9 - 1
        If CDbl(Sheet2.Cells(j, 7).Value2) > CDbl(Sheet2.Cells(j, 3).Value2) Then
            Sheet2.Range(Cells(j, 2), Cells(j, 7)).Interior.ColorIndex = 6
        Else
            Sheet2.Range(Cells(j, 2), Cells(j, 7)).Interior.ColorIndex = 0
        End If
    Next

Nếu được rồi, thì suy nghĩ tiếp, tìm kiếm hiểu vể RANGE và UNION để tô màu nhanh hơn ;; và PHẦN
Sheet2.Range(Cells(j, 2), Cells(j, 7)).Interior.ColorIndex = 0
không cần đặt trong FOR (?)
 
Lần chỉnh sửa cuối:
Upvote 0
@tigertiger e đã thay code mới ở trên mà chỉ bôi được mấy dòng đầu (từ dòng 28 trở lên), còn các dòng từ 28 trở đi vẫn không được. khó hiểu thật.
 
Upvote 0
@tigertiger e đã thay code mới ở trên mà chỉ bôi được mấy dòng đầu (từ dòng 28 trở lên), còn các dòng từ 28 trở đi vẫn không được. khó hiểu thật.
Thay cái nào, phương án nào?

Xem lại Ubound(darr2) nhé, xem nó đang bằng bao nhiêu khi code chạy, nếu không thay đó bằng 90 hay hơn nữa xem sao
(vì file code bạn up lên, nó còn mở và lấy dữ liệu từ file khác - nên tôi không thể test (thử) thay cho bạn được)

Ah, thử thay
UBound(dArr2, 2) + 9 - 1
thành
UBound(dArr2) + 9 - 1
 
Upvote 0
chính là nó rồi. Thanks thầy nhiều nhé.
à mà tiện cho em hỏi thêm: sao lại phải +9-1 ở "UBound(dArr2) + 9 - 1 " thầy nhỉ

vì darr2 có chỉ số hàng (index row) đánh số từ 1, còn hàng của bạn lại bắt đầu từ 9--> hàng kết thúc KHÔNG THỂ = ubound(darr2) (mà nó lớn hơn), tức là nó phải bằng như hiện có trên
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom