đặt chức năng phím tab

Liên hệ QC

Cao Mạnh Sơn

Tôi đồng ý
Tham gia
26/11/07
Bài viết
568
Được thích
586
Nhờ các bác hướng dẫn có cách nào đặt cho phím tab để khi nhấn phím này thì có thể nhảy cách 1 số cột theo ý mình
 
Bác tìm hiểu phương thức SendKeys là được, sau đó bổ sung thêm code.
 
chắc là
Application.Sendkey {Tab}

nhưng phương thức này giống như gửi phím Tab cho chương trình nghĩa là nó nhãy sang ô kế cận bên phải

chắc k đúng ý đó ng hỏi: ng hỏi muốn là xử lý khi bấm phím tab?
Thông thường trong bảng tính excel khi bấm phím tab thì nó sẽ dịch chuyển 1 ô sang bên phải.khi mình dùng phím mũi tên nó cũng có tác dụng tương tự.Trong Word thì mình có thể đặt khoảng cách giữa các tab theo ý mình.
Bây giờ em muốn đặt chức năng của phím tab trong excel để khi nhấn phím này nó có thể dịch chuyển sang phải 2 hoặc nhiều ô theo mong muốn của mình.
 
Thông thường trong bảng tính excel khi bấm phím tab thì nó sẽ dịch chuyển 1 ô sang bên phải.khi mình dùng phím mũi tên nó cũng có tác dụng tương tự.Trong Word thì mình có thể đặt khoảng cách giữa các tab theo ý mình.
Bây giờ em muốn đặt chức năng của phím tab trong excel để khi nhấn phím này nó có thể dịch chuyển sang phải 2 hoặc nhiều ô theo mong muốn của mình.

Bạn thử dùng ONKEY xem. Xem thử ví dụ sau:
Trong module cho đoạn code này vào:
PHP:
Sub TabT()
Application.OnKey "{TAB}", "MyTab"
End Sub

Sub MyTab()
Dim Rj, Cj ,Step As Integer
Rj = ActiveCell.Row
Cj = ActiveCell.Column
Step = 2     'Muốn Tab nhảy qua mấy cột thì set giá trị tại đây
Cells(Rj, Cj + Step).Select     
End Sub

Trong ThisWorkbook, cho đoạn code này vào:
PHP:
Private Sub Workbook_Open()
Call TabT
End Sub

Hehehe...
 
Lần chỉnh sửa cuối:
Bạn thử dùng ONKEY xem. Xem thử ví dụ sau:
Trong module cho đoạn code này vào:
PHP:
Sub TabT()
Application.OnKey "{TAB}", "MyTab"
End Sub

Sub MyTab()
Dim Rj, Cj ,Step As Integer
Rj = ActiveCell.Row
Cj = ActiveCell.Column
Step = 2     'Muốn Tab nhảy qua mấy cột thì set giá trị tại đây
Cells(Rj, Cj + Step).Select     
End Sub
Trong ThisWorkbook, cho đoạn code này vào:
PHP:
Private Sub Workbook_Open()
Call TabT
End Sub
Hehehe...


thế thì thay MyTab() thế này cho nhanh và đơn giản


PHP:
Sub MyTab()
    ActiveCell.Offset(0, 2).Select   ''neu mun dich 2 Ô 
End Sub
 
Không biết 2 bác Ca_dafi và bác TigerTiger có giấu bí quyết gì nữa không nhưng em đã thử cả trong Excel2003 và 2007 đều được kết quả "như cũ". Em gửi kèm 2 file nhờ các bác ktra hộ.
 

File đính kèm

Không biết 2 bác Ca_dafi và bác TigerTiger có giấu bí quyết gì nữa không nhưng em đã thử cả trong Excel2003 và 2007 đều được kết quả "như cũ". Em gửi kèm 2 file nhờ các bác ktra hộ.

Làm gì có chuyện giấu bí quyết chứ, vả lại mình có bí quyết đâu .... mà giấu!Hehe

Vì trong Thisworkbook có đoạn code xử lý Workbook_Open cho nên khi copy code vào vba rồi thì bạn phải lưu và đóng file lại, rôi lại mở lại.

Hoặc bạn phải cho RUN đoạn code trong ThisWorkbook trước sau đó mới test nút TAB trong sheet. Vậy nhé. Báo kết quả liền nhé.
 
Không biết 2 bác Ca_dafi và bác TigerTiger có giấu bí quyết gì nữa không nhưng em đã thử cả trong Excel2003 và 2007 đều được kết quả "như cũ". Em gửi kèm 2 file nhờ các bác ktra hộ.

đúng như ca_dafi nói bạn làm như thế đi

tôi test rùi, thấy

+ File tigertiger.xls chạy tốt

+ File cada_fi.xls thì bị lỗi, tại dòng
Step = 2 Muo^'n Tab nha?y qua ma^'y co^.t thì set giá tri. ta.i ?ây

(do bạn copy mất dấu - vì đặt trong phần php CODE, lần sau đánh 2 dấu ('') lun trong đó cada_fi ah như bài trên của tôi nhé)
giờ bạn chỉ thêm dấu đỏ sau là OK

Step = 2 ' Muo^'n Tab nha?y qua ma^'y co^.t thì set giá tri. ta.i ?ây

Sub MyTab()
Dim Rj, Cj, Step As Integer
Rj = ActiveCell.Row
Cj = ActiveCell.Column
Step = 2 ' Muo^'n Tab nha?y qua ma^'y co^.t thì set giá tri. ta.i ?ây
Cells(Rj, Cj + Step).Select
End Sub
thế là được,
 
Lần chỉnh sửa cuối:
Xin lỗi vì vẫn phải quay lại đề tài này.Em lại nhờ 2 bác Ca_dafi và bác TigerTiger giải thích hộ. Số là thế này:
Nếu bây giờ em mở 1 file không có VBA cho phím tab (ví dụ book1), em sử dụng bình thường tức là nhấn phím tab chỉ dich sang phải 1 ô.
mở tiếp file TigerTiger(có VBA cho phím tab),quay lại file ban đầu book1 thì khi nhấn phím tab nó sẽ dịch chuyển 2 ô giống như trong file TigerTiger(ngoài ý muốn)
chưa hết,nếu em đóng file TigerTiger lại,khi đó book1 vẫn mở thì khi nhấn phím tab lập tức file TigerTiger được mở trở lại(ngoài ý muốn thứ hai)
Nếu đóng tất cả lại và mở lại book1 thì phím tab bình thường và cũng không tự động mở file TigerTiger ra nữa.
Như vậy nếu cùng 1 lúc mà mở nhiều file trong đó có file chứa đoạn code VBA cho phím tab thì đều cùng có tác dụng như nhau và đương nhiên tất cả các file đó sẽ phải chấp nhận sự có mặt của file TigerTiger bởi vì dù có đóng lại nhưng nhấn tab lập tức được mở ra liền
Kể ra cũng "hay" nhưng em không hiểu.Nhờ các bác lần nữa giúp đỡ vấn đề này
 
Xin lỗi vì vẫn phải quay lại đề tài này.Em lại nhờ 2 bác Ca_dafi và bác TigerTiger giải thích hộ. Số là thế này:
Nếu bây giờ em mở 1 file không có VBA cho phím tab (ví dụ book1), em sử dụng bình thường tức là nhấn phím tab chỉ dich sang phải 1 ô.
mở tiếp file TigerTiger(có VBA cho phím tab),quay lại file ban đầu book1 thì khi nhấn phím tab nó sẽ dịch chuyển 2 ô giống như trong file TigerTiger(ngoài ý muốn)
chưa hết,nếu em đóng file TigerTiger lại,khi đó book1 vẫn mở thì khi nhấn phím tab lập tức file TigerTiger được mở trở lại(ngoài ý muốn thứ hai)
Nếu đóng tất cả lại và mở lại book1 thì phím tab bình thường và cũng không tự động mở file TigerTiger ra nữa.
Như vậy nếu cùng 1 lúc mà mở nhiều file trong đó có file chứa đoạn code VBA cho phím tab thì đều cùng có tác dụng như nhau và đương nhiên tất cả các file đó sẽ phải chấp nhận sự có mặt của file TigerTiger bởi vì dù có đóng lại nhưng nhấn tab lập tức được mở ra liền
Kể ra cũng "hay" nhưng em không hiểu.Nhờ các bác lần nữa giúp đỡ vấn đề này

Sorry , giờ hôm nay tìm lại chủ đề này mới biết có câu hỏi

Không sử dụng sự kiện Workbook_Open thay như sau, và bỏ SUB TabT, là được

Khi đó chỉ có file chứa CODE này mới có hiệu lực

PHP:
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
 
 Application.OnKey "{TAB}", "MyTab"
End Sub

Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
   Application.OnKey "{TAB}"
End Sub
Còn tại sao , chắc là không khó hiểu, khi bạn đọc các dòng CODE trên
.
 
Lần chỉnh sửa cuối:
Liên quan nút Tab trong form tôi có textbox1 ,textbox2,textbox3,textbox4,textbox5,textbox6
Nay muốn Tab đến textbox1,textbox2,textbox3,textbox6 rôi trở lại textbox1,2..
(bỏ qua 4,5)
Nhờ các bạn giúp , cảm ơn nhiều .
 
đúng như ca_dafi nói bạn làm như thế đi

tôi test rùi, thấy

+ File tigertiger.xls chạy tốt

+ File cada_fi.xls thì bị lỗi, tại dòng
Step = 2 Muo^'n Tab nha?y qua ma^'y co^.t thì set giá tri. ta.i ?ây

(do bạn copy mất dấu - vì đặt trong phần php CODE, lần sau đánh 2 dấu ('') lun trong đó cada_fi ah như bài trên của tôi nhé)
giờ bạn chỉ thêm dấu đỏ sau là OK

Step = 2 ' Muo^'n Tab nha?y qua ma^'y co^.t thì set giá tri. ta.i ?ây

thế là được,

bạn có thể làm như thế nào thì không còn lỗi , nữa đâu nhé! có này thì dễ hiểu
PHP:
----------------------------------------------------------------------------------------------------------------------------
Sub MyTab()
Dim Rj, Cj, Step As Integer
Rj = ActiveCell.Row
Cj = ActiveCell.Column
Step = 2 ' "so buoc nhay den cell"
Cells(Rj, Cj + Step).Select
End Sub
------------------------------------------------------------------------------------------------------------------------------

còn hàm này thì em chưa hiểu lắm chạy nhanh như thế nào nhờ các pác chỉ hộ em với!

Offset(0, 2)
PHP:
-------------------------------------------------------------------------------------------------------------------
Sub MyTab()
    ActiveCell.Offset(0, 2).Select   ''neu mun dich 2 Ô 
End Sub
--------------------------------------------------------------------------------------------------------------------------
 
Lần chỉnh sửa cuối:
còn hàm này thì em chưa hiểu lắm chạy nhanh như thế nào nhờ các pác chỉ hộ em với!

Offset(0, 2)
Bạn xem các ví dụ này là hiểu ngay đây là phương thức của cell, range,...

Activecell.offset(2,1) means 2 rows down and one col right
Activecell.offset(-2,-1) means 2 rows up and one col left
Activecell.offset(0,-1) means same row and one col left

Activecell.Offset(0, 2) means same row and two cols right

Tiếng anh một chút cho relax,
.
 
Lần chỉnh sửa cuối:
Các bác ơi cho em hỏi: trong Excel, em gõ nút "Tab" nó không nhảy sang cột tiếp theo mà nó cách tới mấy cột liền, rất bất tiện. Bác nào biết giúp em với.
 
Các bác ơi cho em hỏi: trong Excel, em gõ nút "Tab" nó không nhảy sang cột tiếp theo mà nó cách tới mấy cột liền, rất bất tiện. Bác nào biết giúp em với.

Khi bạn nhấn fím Tab con trỏ nó nhảy cách mấy cột là do code này
Sub MyTab
()
ActiveCell.Offset(0, 2).Select
End Sub


Offset
có nghĩa là dịch chuyển, chỉ số trong ngoặc là số dòng, số cột sẽ dịch chuyển: Offset(số dòng, số cột)
Offset(0, 0) có nghĩa là dịch chuyển 0 dòng, 0 cột tức là không dịch chuyển

Chỉ số dòng là 0 có nghĩa là không dịch chuyển dòng (cùng dòng con trỏ đang đứng)
Chỉ số dòng >0 có nghĩa là dịch chuyển xuống dòng dưới (so với dòng con trỏ đang đứng)
Chỉ số dòng <0 có nghĩa là dịch chuyển lên dòng trên (so với dòng con trỏ đang đứng)

Chỉ số cột là 0 có nghĩa là không dịch chuyển dòng (cùng cột)
Chỉ số cột >0 có nghĩa là dịch chuyển sang phải (so với cột con trỏ đang đứng)
Chỉ số cộtg <0 có nghĩa là dịch chuyển sang trái (so với cột con trỏ đang đứng)

Nếu bạn muốn nó nhảy nhiều hơn 1 cột thì sửa lại chỉ số cột còn muốn nó nhảy 1 cột thì xoá code đi (trở về mặc định).
 
Sub MyTab()
ActiveCell.Offset(0, 2).Select
End Sub

Giúp dùm em làm ngược lại, khi nhấn phím Shift + Tab thì con trỏ dịch chuyển lại 4 cột. Xin cảm ơn!
 
sửa thành
Sub MyTab()
ActiveCell.Offset(0, -4).Select
End Sub
 
Web KT

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

Back
Top Bottom