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 thường trực
Tham gia
28/9/22
Bài viết
398
Được thích
74
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

  • Cutting_F6_24.xlsb
    94.3 KB · Đọc: 20
Mã:
Private Sub ghilistbox2()
    Tb_SL.Value = Evaluate(Tb_SL.Value)
    If Tb_SL <= 0 Then
        MsgBox ("SL phai > 0"), vbInformation
        Exit Sub
    End If

    With ListBox2
        .AddItem .ListCount + 1
        .List(.ListCount - 1, 1) = Tb_Ngay: .List(.ListCount - 1, 2) = Cb_Machine: .List(.ListCount - 1, 3) = Tb_Track
        .List(.ListCount - 1, 4) = Cb_Job: .List(.ListCount - 1, 5) = TxtBP1: .List(.ListCount - 1, 6) = Cb_RQ
        .List(.ListCount - 1, 7) = Cb_Code: .List(.ListCount - 1, 8) = TxtDes: .List(.ListCount - 1, 9) = Tb_SL

        .ListIndex = .ListCount - 1 'chon gia tri cuoi cung
    End With
    Cb_Machine.SelStart = 0:     Cb_Machine.SelLength = Len(Cb_Machine.Value): Tb_Track.SelStart = 0: Tb_Track.SelLength = Len(Tb_Track.Value)
    Cb_RQ.SelStart = 0:     Cb_RQ.SelLength = Len(Cb_RQ.Value): Cb_Job.SelStart = 0: Cb_Job.SelLength = Len(Cb_Job.Value)
    Cb_Code.SelStart = 0:   Cb_Code.SelLength = Len(Cb_Code.Value)
    Tb_SL = Empty
    
End Sub
Em đã bỏ Cb_Machine.SetFocus, nhưng vẫn vậy.
Bài đã được tự động gộp:

Sao em thấy kỳ là ở trên ListBox1, khi ghi xong vào ListBox1 thì TxtThick.SetFocus mà nhấn Alt+Z ghi vào sheetRQ có bị sao đâu. Mà ListBox2 thì lại bị. Không hiểu nỗi.
 
Lần chỉnh sửa cuối:
Upvote 0
Không hiểu sao, cứ chuyển qua control nào mà SetFocus là cũng bị lỗi hết, chứ chẳng lẻ nhập xong lại nhấp chuột vào chọn Cb_Machine để nhập tiếp.
Mong các anh xem sai chổ nào ạ.
 
Upvote 0
Bạn bỏ các lệnh SelStart, SelLength đi, chúng không có ý nghĩa gì cả
 
Upvote 0
Cám ơn 2 anh @HeSanbi@ongke0711 , để em thử.
Bài đã được tự động gộp:

Làm như anh @ongke0711 vẫn bị, còn như anh @HeSanbi thì được, nhưng mỗi lần qua dòng khác lại phải nhấp chuột vào.
Đau đầu quá.
Bài đã được tự động gộp:

Lỗi hình như ở cái Cb_Machine, vậy mình có thể không để ở trong Form_Initialize, mà cho nó ra Cb_Change được không các anh???
 
Lần chỉnh sửa cuối:
Upvote 0
Nếu bạn đủ thông minh thì tạo thêm cái ComboBox chung, chuột luôn ở ComboBox đó, chỉ thao tác phím Tab, Shift+Tab để chuyển các qua lại các Box
Tab sang box nào thì lấy thông số về cbx chung và Highlight Box sau khi Tab. Cứ vậy thôi.
 
Upvote 0
Làm như anh @ongke0711 vẫn bị, còn như anh @HeSanbi thì được, nhưng mỗi lần qua dòng khác lại phải nhấp chuột vào.
À tôi quên một điểm quan trọng là bạn bỏ cái DropDown của comboBox đi là được, để tránh nó vô chế độ chỉnh sửa gì đó làm phím Alt sẽ bị comboBox này bắt sang nó.

Screen Shot 2024-01-15 at 23.26.40.png


Tôi cũng quen đọc code theo kiểu từ trên xuống dưới, giờ đọc sang hàng ngang thì không quen, thấy khó thật.
 
Upvote 0
Bó tay các anh ơi, vẫn không được.
 
Upvote 0
Anh @ongke coi dùm có thể do tùy chọn trong control có gì không anh???
 
Upvote 0
Sửa mã của bạn lại:


JavaScript:
Private Sub ghilistbox2()
    If IsNumeric(Tb_SL) Then
      If CLng(Tb_SL) <= 0 Then MsgBox ("SL phai > 0"), vbInformation: Exit Sub
    Else
        MsgBox ("SL phai la Number"), vbInformation
        Exit Sub
    End If

    With ListBox2
        .AddItem .ListCount + 1
        .List(.ListCount - 1, 1) = Tb_Ngay: .List(.ListCount - 1, 2) = Cb_Machine: .List(.ListCount - 1, 3) = Tb_Track
        .List(.ListCount - 1, 4) = Cb_Job: .List(.ListCount - 1, 5) = TxtBP: .List(.ListCount - 1, 6) = Cb_RQ
        .List(.ListCount - 1, 7) = Cb_Code: .List(.ListCount - 1, 8) = TxtDes: .List(.ListCount - 1, 9) = Tb_SL

        .ListIndex = .ListCount - 1 'chon gia tri cuoi cung
    End With
    
    Cb_Machine.SelStart = 0:     Cb_Machine.SelLength = Len(Cb_Machine.Value): Tb_Track.SelStart = 0: Tb_Track.SelLength = Len(Tb_Track.Value)
    Cb_RQ.SelStart = 0:     Cb_RQ.SelLength = Len(Cb_Machine.Value): Cb_Job.SelStart = 0: Cb_Job.SelLength = Len(Tb_Track.Value)
    Cb_Code.SelStart = 0:   Cb_Code.SelLength = Len(Cb_Machine.Value)
    Tb_SL = Empty:
    Cb_Machine.SetFocus
    Cb_Machine.DropDown
End Sub

Private Sub Cb_Machine_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  Select Case Shift
  Case 4:
    Select Case KeyCode
    Case vbKeyX: CmdLuuCut_Click: KeyCode = 0
    End Select
  End Select
End Sub
 
Upvote 0
Đưa câu lệnh Cb_Machine.SetFocus vào sự kiện ListBox2_KeyDown. Thêm 1 cái enter để nhập liệu tiếp thôi.
Code trong file rối rắm quá, khiến cho nhập liệu khó khăn:
- hễ vào bất cứ combobox nào là dropdown, dù chẳng muốn chọn lại.
- Tại textbox SL, phải nhấn enter mới ghi, thói quen nhấn tab sẽ báo lỗi không nhập liệu đầy đủ. Nhìn thông báo chả biết đường nào mà lần vì ngó đi ngó lại chả biết thiếu cái gì.
- Nhấn n út lưu xuống sheet thì kiểm tra Listbox có dữ liệu hay không, mắc mớ gì kiểm tra dữ liệu mấy textbox với combobox?
- Code trong mấy module (hàm của window) chả biết để làm gì.
- ...
 
Lần chỉnh sửa cuối:
Upvote 0
Em dùng dropdown để hiện ra để biết mà chọn thầy @ptm0412
Bài đã được tự động gộp:

Hàm của window là ẩn Caption của Form thầy @ptm0412
 
Upvote 0
Em dùng dropdown để hiện ra để biết mà chọn thầy @ptm0412
Hàm của window là ẩn Caption của Form thầy @ptm0412
Mấy cái ẩn đó không quan trọng lắm (mặc dù tôi ghét) (còn cái timer?)
khi nào cần chọn thì nhấn F4 và/ hoặc gõ vài ký tự. Còn những trường hợp không cần chọn lại mà xổ xuống thì nhìn rối.

Còn cái gạch đầu dòng 2 và 3?
Còn gợi ý sửa code đơn giản?

Ghét (lại ghét) việc đọc bài chỉ chăm chăm biện minh hoặc cãi mà không đọc ý chính
 
Upvote 0
Cái gạch đầu dòng 2, nếu không enter ở Tb SL thì ghi vào lítbox2 bằng cách nào nưa thầy @ptm0412 .
Cái gạch đầu dòng 3 em công nhận là thừa thầy @ptm0412 .
Bài đã được tự động gộp:

Mấy Form trước không vấn đề gì, Form này em nghi do có mấy cái combbox phụ thuộc nên ra như vậy. Chạy không mượt, có lúc combobox không có dữ liệu, phải thoát Form mở lại.
Mong các anh xem dùm.
 
Lần chỉnh sửa cuối:
Upvote 0
Cái gạch đầu dòng 2, nếu không enter ở Tb SL thì ghi vào lítbox2 bằng cách nào nưa thầy @ptm0412 .
Trong cái gạch đầu dòng đó có chữ tab. Nhiều người dùng tab chứ không dùng enter. dùng enter ít hơn.
Ngoài ra ấy câu lệnh SelStart, SelLength sẵn cho 3, 4 control cũng thừa.

Còn cái ý chính: nếu enter chạy nhập list, thì không setfocus ngay mà setfocus trong sự kiện Keydown của Listbox. Nghĩa là đứng ở SL enter 2 cái
 
Upvote 0
Trong cái gạch đầu dòng đó có chữ tab. Nhiều người dùng tab chứ không dùng enter. dùng enter ít hơn.
...
Theo tiêu chuẩn không thành văn của Form - tất cả các loại Form, không chỉ riêng Excel hay Micorsoft - thì tab và shift-tab dùng để đi tới đi lui trong form; enter dùng để kết thúc hoặc tab qua một nhóm controls.
Và tôi luôn luôn dạy users của tôi rõ về điều này.
 
Upvote 0
Em để ý thấy cứ có chỉnh sửa gì trong code thì các combobox kia lại trống trơn. Bó tay.
 
Upvote 0
Web KT
Back
Top Bottom