Nhấn phím tắt mà combobox không chạy.

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

LuuAnh980

Thành viên tiêu biểu
Tham gia
28/9/22
Bài viết
453
Được thích
104
Giới tính
Nữ
Em có 1 Form nhập liệu, khi nạp dữ liệu đầy đủ vào Listbox2 (trong phần Cutting) nhấn Alt+X thì nạp dữ liệu vào Sheet!Cat.
Ví dụ như sau:
Gõ ngày 12/1 vào Date->Gas vào Machine->01235 vào Track No->2222 vào Job->18 vào RQ No-> 1015120 vào Code->gõ 2 vào Q'Ty nhấn Enter thì dữ liệu đập vào ListBox2, và lúc nhấn phím tắt Alt+X thì lại nhảy lên Cb_Machine. Em nghĩ có thể do lúc đó Cb_Machine setfocus, nhưng nếu vậy thì lại ở ListBox1 lại không sao. Em xin đưa hình minh họa và file.
Mở Form: Ctrl+q.
Code trong file có sự giúp đỡ của anh @HieuCD , mong các anh giúp đỡ cho Form chạy mượt.LoiLB.png
 

File đính kèm

Em thì cứ lấy code của các anh trên đây giúp ghép vào, chạy được thì chạy, còn không cứ nhờ tiếp, chứ có biết đâu.
Nhưng cứ khoái "hoành tá tràng" nên mới bị tổ trác.
 
Upvote 0
Ngộ thiệt các anh ơi, sao cứ làm xong thấy chạy được rồi, chỉnh trong code một tý là lại lỗi combobox rỗng.
Đau đầu. Ví dụ thấy ghi vào sheet ngon rồi, nhưng sai vị trí cột, thế là chỉnh code cho đúng vị trí cột, mở lại file thì chạy lại lỗi combobox rỗng.
 
Upvote 0
Tôi đang xem có thể lỗi do đâu, tình cờ thấy cái biến mIsShow đặt ra chả biết để làm gì mà tới cả chục sub lôi nó ra gán giá trị và ngó.
 
Upvote 0
Ngộ thiệt các anh ơi, sao cứ làm xong thấy chạy được rồi, chỉnh trong code một tý là lại lỗi combobox rỗng.
Đau đầu. Ví dụ thấy ghi vào sheet ngon rồi, nhưng sai vị trí cột, thế là chỉnh code cho đúng vị trí cột, mở lại file thì chạy lại lỗi combobox rỗng.
Bây giờ bạn comment hết các dòng "On Error Resume Next" trong toàn bộ code đi rồi debug từ từ.

Mới bỏ cái là báo lỗi liền đây. Nó Failed rồi, lấy gì gán dữ liệu cho comboBox RQ.

Screen Shot 2024-01-18 at 23.20.48.png
 
Upvote 0
Đúng rồi, cha chả là đúng! Hình bài 45 lỗi khi đứng ở sheet Cat, hình bài 55 lỗi khi đứng ở sheet Xem
 
Upvote 0
Tôi sửa cái dòng lệnh lỗi ở trên như này thì không báo lỗi.
(Mấy vụ tham chiếu range, cell cũng không rành lắm nên có thể nó dài dòng)

Code cũ:
JavaScript:
arr = Sheet1.Range("A3", Range("C1000000").End(xlUp)).Value

==> Đổi sang code này:

JavaScript:
arr = Sheet1.Range("A3", "C" & Sheet1.Range("C" & Rows.Count).End(xlUp).Row).Value
 
Upvote 0
Tôi sửa cái dòng lệnh lỗi ở trên như này thì không báo lỗi.
đúng là chỗ này. Code lỗi do Range("C1000000").End(xlUp) không chỉ định sheet cho nó, nên mặc định sheet hiện hành.
Nguyên câu lệnh lấy range ô đầu A3 sheet này, ô cuối C78 sheet kia.
Tôi thì sửa thế này, để thấy rõ cái tật copy code mà không hiểu code

1705596863302.png

Cũng cùng 1 lỗi đó khi sửa lỗi trống combobox RQ, là lỗi trống combobox Code. Cách sửa giống vậy.

1705596798167.png

Ngoài ra tôi tô xanh lè thế này mà vẫn chạy được:

1705597145590.png
 
Upvote 0
Một đống code lặp lại cho các comboBox với các sự kiện KeyUp, MouseDown...(như hình màu xanh bác ptm0412 đề cập ở trên), bạn nên viết nó thành cái Class rồi chỉ cần gọi ở sự kiện Form_Initialize cho nó gọn, đỡ rối. Giờ cứ mỗi comboBox phát sinh là phải copy code lặp lại y chang, có khi còn có sai sót do nhiều quá.
 
Upvote 0
Một đống code lặp lại cho các comboBox với các sự kiện KeyUp, MouseDown...(như hình màu xanh bác ptm0412 đề cập ở trên), bạn nên viết nó thành cái Class rồi chỉ cần gọi ở sự kiện Form_Initialize cho nó gọn, đỡ rối. Giờ cứ mỗi comboBox phát sinh là phải copy code lặp lại y chang, có khi còn có sai sót do nhiều quá.
mIsShow khai báo và gán giá trị xong chả dùng làm gì, xóa hết quách cho trống.
 
Upvote 0
Dạ em cám ơn thầy @ptm0412 và anh @ongke0711 đã giúp em giải quyết cái Form bị lỗi, qua hơn 60 bài mới thấy cái lỗi của em. Code đó là em nhờ 1 anh viết hộ, mà khi đưa file chỉ có 1 sheet duy nhất nên ảnh chỉ để Range, em có biết và chỉ định sheet1 đầu ngoặc ( , em cứ tưởng như vậy là mặc định chỉ định sheet1 rôi, ai ngờ trong ngoặc ( cũng phải chỉ định sheet1 cho C100000 nữa. Em thì cứ sưu tầm code trên GPE, và ghép vào file thôi, chứ anh @ongke0711 mà nói em viết Class module thì bó tay, à mà các anh ơi, sao code lưu Job và lưu cut chạy rồi mà thấy rỏ màn hình giựt, mặc dù em có cài Application SreenUpdating. Một lần nữa em Cám ơn thầy @ptm0412 và anh @ongke0711 nhiều.
Mong các anh hỗ trợ Form chạy cho tốt ạ.
 
Upvote 0
Nói về tối ưu code, tôi không sửa nhưng chỉ ra chỗ không hợp lý và giải pháp thôi:
1. Tách riêng 2 sub create list cho RQ và Code thì có vẻ được rồi, nhưng sinh ra chuyện arr của sheet1 phải tạo nhiều lần. Nếu trong sự kiện của job (có arr sẵn), tạo list cho RQ luôn trong sự kiện thì không phải tạo arr lần 2. Tương tự là sự kiện của RQ.
2. Tạo sẵn 3 Dic để đó rồi mãi sau đó mới xài, Dic có giá trị rồi lại để đó, mãi sau đó mới xài; nên phải khai báo public. Phí của giời. Làm như (1) thì khi nào cần mới tạo Dic.
3. Khi vừa gán list cho combobox Job xong, gán luôn giá trị ban đầu cho nó = List(0), thế là 1 loạt sự kiện phía sau được kích hoạt.
4. Nếu chọn bằng phím mũi tên tức là kích hoạt KeyUp, KeyDown, các sự kiện phía sau cũng được chạy.

Làm được như vậy thì vừa nhanh vừa gọn code.
 
Upvote 0
Thầy @ptm0412 nói thì em biết vậy thôi, chứ em mà viết code được như vậy " chết liên".
 
Upvote 0
Upvote 0
Web KT

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

Back
Top Bottom