Điều khiển nhảy ô khi nhấn phím Enter

Liên hệ QC

vtt

Thành viên mới
Tham gia
19/12/06
Bài viết
38
Được thích
29
Chào các bạn,
Tôi có 1 file Excel dùng để nhập dữ liệu. Trong đó, dữ liệu cần nhập vào ở 2 cột B, E và dữ liệu được nhập thứ tự vào các ô như sau: B1, E1, B2, E2, B3, E3, B4, E4 .....
Nếu dùng chuột hoặc phím mũi tên thì quá chậm.
Tôi muốn tạo điều khiển như sau:
1. Nhập dữ liệu vào ô B1 và nhấn phím Enter, con trỏ tự động nhảy sang ô E1;
2. Nhập dữ liệu vào ô E1 và nhân Enter, con trỏ tự động nhảy sang ô B2;
3. ..............

Các bạn có thể giúp tôi được không?
Cảm ơn nhiều.
 
bạn phải dùng VBA cho trường hợp này thôi.

Mã:
[color=darkblue]Private[/color] [color=darkblue]Sub[/color] Worksheet_Change([color=darkblue]ByVal[/color] Target [color=darkblue]As[/color] Range)
    [color=darkblue]If[/color] ([color=darkblue]Not[/color] Intersect(Target, Range("B:B")) [color=darkblue]Is[/color] [color=darkblue]Nothing[/color]) [color=darkblue]Or[/color] (Not Intersect(Target, Range("E:E")) [color=darkblue]Is[/color] [color=darkblue]Nothing[/color]) [color=darkblue]Then[/color]
        [color=darkblue]If[/color] Target.Column = 2 [color=darkblue]Then[/color]
            Cells(Target.Row, 5).Select
        [color=darkblue]Else[/color]
            Cells(Target.Row + 1, 2).Select
        [color=darkblue]End[/color] [color=darkblue]If[/color]
    [color=darkblue]End[/color] [color=darkblue]If[/color]
End [color=darkblue]Sub[/color]

bạn copy đoạn code trên, về Excel, right click vào tên sheet cần áp dụng yêu cầu, chọn view code, paste đoạn code trên vào.

bạn thử xem (Yêu cầu là phải có thay đổi dữ liệu nhé.)
 
Upvote 0
Tool->Option->Edit, tích chọn Move selection after enter và khai báo Direction = Right.
Ẩn 2 cột C và D; Đánh dấu từ B1 đến E cuối và nhập dữ liệu.
 
Upvote 0
Sau khi nhập xong vô E4 sẽ về B1:

PHP:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, Union(Range("B1:B4"), Range("E1:E4"))) Is Nothing Then
    If Target.Address = "$E$4" Then
        Cells(1, 2).Select
    ElseIf Target.Column = 2 Then
        Cells(Target.Row, 5).Select
    ElseIf Target.Column = 5 Then
        Cells(Target.Row + 1, 2).Select
    End If
 End If
End Sub
 
Upvote 0
vtt đã viết:
Chào các bạn,
Tôi có 1 file Excel dùng để nhập dữ liệu. Trong đó, dữ liệu cần nhập vào ở 2 cột B, E và dữ liệu được nhập thứ tự vào các ô như sau: B1, E1, B2, E2, B3, E3, B4, E4 .....
Nếu dùng chuột hoặc phím mũi tên thì quá chậm.
Tôi muốn tạo điều khiển như sau:
1. Nhập dữ liệu vào ô B1 và nhấn phím Enter, con trỏ tự động nhảy sang ô E1;
2. Nhập dữ liệu vào ô E1 và nhân Enter, con trỏ tự động nhảy sang ô B2;
3. ..............

Các bạn có thể giúp tôi được không?
Cảm ơn nhiều.


BẠN CHÉP ĐOẠN CODE NÀY VÀO SHEET ,BẰNG CÁCH NHẤN NÚT PHẢI CHUỘT VÀ CHỌN VIEW CODE

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim DONG As Variant
If Target.Column = 3 Or Target.Column = 6 Then
If ActiveCell.Column = 3 Then
DONG = ActiveCell.Row
CELLS(DONG, 5).Select
Else
DONG = ActiveCell.Row
CELLS(DONG + 1, 2).Select
End If
End If
End Sub
 
Upvote 0
anhtuan1066 đã viết:
Cái trò của Chibi coi bộ ngon ăn nhất... Bổ và rẽ... ha... ha...
Cái này cũng hay, nhưng cũng có nhiều hạn chế. Ở đây, tôi cần Cột B là mã khách hàng, Cột C là Tên khách hàng, Cột E là Số tiền nộp. Dữ liệu cần nhập vào là cột B, E còn cột C sẽ tự động hiện ra.
Với lại, tôi định làm chương trình này để hỗ trợ thu cước khách hàng. Người sử dụng chương trình này không có đủ trình độ cũng như sự nhanh nhạy để xử lý như Chibi đâu.
Dù sao thì cũng rất cảm ơn các bạn.
THANK YOU
 
Upvote 0
Ở đây, tôi cần Cột B là mã khách hàng, Cột C là Tên khách hàng, Cột E là Số tiền nộp. Dữ liệu cần nhập vào là cột B, E còn cột C sẽ tự động hiện ra. Với lại, tôi định làm chương trình này để hỗ trợ thu cước khách hàng. Người sử dụng chương trình này không có đủ trình độ cũng như sự nhanh nhạy để xử lý như Chibi đâu.
Dù sao thì cũng rất cảm ơn các bạn.
THANK YOU
Nếu người sử dụng chưa đủ trình độ thì bạn xem thử việc nhập dữ liệu gián tiếp có hơn gì không?
Ý tôi muốn nói là thiết kế 1 form hay 1 sheet nhập liệu riêng, người sử dụng đầu cuối không nên rờ đến CSDL (!) . . . .
 
Upvote 0
Tôi muốn gởi file hỗ trợ thu cước tiền điện tặng các bạn nhưng tôi bị giới hạn dung lượng tải file (Sum of all attachments owned by vtt: 799.4 KB). Tôi phải làm sao đây???
 
Upvote 0
Tôi thấy dùng theo cách của ChiBi cũng hay và đơn giản.
- Chọn Enter sang phải.
- Tạo hết ct cần tạo ở cột khác
- Chỉ cần lock hết sh, chọn cột B và E bỏ lock. Protect Sheet, đánh dấu select unlocked cells. OK
Tôi xin tham gia ngu ý như vậy, có gì không hay thì đừng dùng.
 
Upvote 0
vtt đã viết:
Chào các bạn,
Tôi muốn tạo điều khiển như sau:
1. Nhập dữ liệu vào ô B1 và nhấn phím Enter, con trỏ tự động nhảy sang ô E1;
2. Nhập dữ liệu vào ô E1 và nhân Enter, con trỏ tự động nhảy sang ô B2;
3. ..............
Khi dùng thủ tục Worksheet_SelectionChange hoặc Worksheet_Change thì bất kỳ phím nào có thể chuyển ô như Tab, Enter, Home, 4 phím mũi tên, ... đều có tác dụng.
Nếu chỉ áp dụng riêng cho phím Enter, bạn phải dùng Onkey để khi phím Enter được bấm sẽ gọi thi hành một thủ tục điều khiển phím MyEnter.
Bạn cần các thủ tục sau:
1. Workbook_Open: dùng để mở Onkey khi workbook được mở.
Mã:
Private Sub Workbook_Open()
Application.OnKey "~", "MyEnter"
Sheets("DATA").Activate
End Sub

2. Workbook_SheetActivate: kiểm tra sheet hoạt động, nếu đúng là "DATA" mới Onkey cho MyEnter hoạt động. Còn các sheet khác thì phím Enter hoạt động bình thường.
Mã:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Sh.Name = "DATA" Then
  Application.OnKey "~", "MyEnter"
Else
  Application.OnKey "~"
End If
End Sub
Workbook_OpenWorkbook_SheetActivate được tạo trong Thisworkbook.

3. MyEnter: điều khiển phím Enter. Nó hoạt động như sau:
- Nếu đang ở cột 2 hoặc 5 và rổng thì không chuyển ô (chờ nhập dữ liệu)
- Nếu ở cột khác 2,5 thì chuyển về cột 2
- Nếu ở dòng cuối 65536 và cột 5 thì chuyển sang cột 2
- Các trường hợp khác thì cột 2 > cột 5, cột 5 chuyển xuống ô dưới cột 2
Mã:
Private Sub MyEnter()
r = ActiveCell.Row
c = ActiveCell.Column
If (c = 2 Or c = 5) And Cells(r, c) = "" Then Exit Sub
If c = 2 Then
  Cells(r, 5).Select
ElseIf c = 5 Then
  If r = 65536 Then Cells(r, 2).Select Else Cells(r + 1, 2).Select
Else
  Cells(r, 2).Select
End If
End Sub

MyEnter được tạo trong Module
 

File đính kèm

  • MyEnter.zip
    8.8 KB · Đọc: 139
Upvote 0
Các bác cho em hỏi
Em có 1 sheet để nhập liệu. Khi sheet đó được chọn, thì ô hiện tại sẽ ở dòng để nhập số liệu (VD: từ A1:A10 có số liệu, khi chọn sheet NHAPLIEU thì cell làm việc ở A11)
Các bác giúp em nhé!
 
Upvote 0
chicuong đã viết:
Các bác cho em hỏi
Em có 1 sheet để nhập liệu. Khi sheet đó được chọn, thì ô hiện tại sẽ ở dòng để nhập số liệu (VD: từ A1:A10 có số liệu, khi chọn sheet NHAPLIEU thì cell làm việc ở A11)
Các bác giúp em nhé!
Copy code này vào thisWorkbook, nó áp dụng cho tất cả các sheet trong workbook:
Mã:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
rc = Cells(1, 1).End(xlDown).Row
If rc = 65536 Then
  Cells(1, 1).Select
Else
  Cells(rc + 1, 1).Select
End If
End Sub
 
Upvote 0
Cách của anh Long rất hay. Nhưng sao nó chỉ tác dụng đối với phím Enter lớn (phím nằm ngay trên phím Shift phải) còn đối với phím Enter nhỏ (nằm ở khu vực phím số) thì không thấy tác dụng?

----------------------------------------------------
Tôi muốn gởi thêm file lên diễn đàn thì phải làm sao đây? (Sum of all attachments owned by vtt: 799.4 KB)?
 
Upvote 0
Đoạn code của anh bạn Long còn có thể viết khác, như sau:
PHP:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
' * * *    MsgBox Sh.Name
           Cells(Cells(65432, 1).End(xlUp).Row + 1, 1).Select
End Sub

cái này không phải vì ngắn hơn vài dòng lệnh mà đưa lên đây; Chú yếu là lúc nào nó cũng tiến đến dòng chưa nhập liệu cuối cùng của cột 'A', dù trên đó có vài ô A(i) không chứa dữ liệu (một cách tình cờ hay chủ í)

:-=
 
Lần chỉnh sửa cuối:
Upvote 0
vtt đã viết:
Cách của anh Long rất hay. Nhưng sao nó chỉ tác dụng đối với phím Enter lớn (phím nằm ngay trên phím Shift phải) còn đối với phím Enter nhỏ (nằm ở khu vực phím số) thì không thấy tác dụng?
Muốn sử dụng Enter bên phím số thì đổi:
Application.OnKey "~", "MyEnter"
thành:
Application.OnKey "{ENTER}", "MyEnter"

 
Upvote 0
Web KT

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

Back
Top Bottom