PDA

View Full Version : đặt chức năng phím tab



cao mạnh sơn
26-05-08, 01:32 PM
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

PhanTuHuong
26-05-08, 02:22 PM
Bác tìm hiểu phương thức SendKeys là được, sau đó bổ sung thêm code.

tigertiger
27-05-08, 02:20 AM
Anh Hướng có thể chỉ cụ thể hơn cho tôi được không.


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?

cao mạnh sơn
27-05-08, 06:47 AM
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.

cadafi
27-05-08, 08:12 AM
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:


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:


Private Sub Workbook_Open()
Call TabT
End Sub


Hehehe...

tigertiger
27-05-08, 11:29 AM
Bạn thử dùng ONKEY xem. Xem thử ví dụ sau:
Trong module cho đoạn code này vào:


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:


Private Sub Workbook_Open()
Call TabT
End Sub
Hehehe...


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



Sub MyTab()
ActiveCell.Offset(0, 2).Select ''neu mun dich 2 Ô
End Sub

cao mạnh sơn
27-05-08, 12:45 PM
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ộ.

cadafi
27-05-08, 01:51 PM
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é.

tigertiger
27-05-08, 04:32 PM
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 Subthế là được,

cao mạnh sơn
28-05-08, 12:53 PM
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

tigertiger
17-11-08, 06:51 PM
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




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
.

le tin
18-11-08, 04:22 PM
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 .

ongtrungducmx25
18-11-08, 06:15 PM
đú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


----------------------------------------------------------------------------------------------------------------------------
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)

-------------------------------------------------------------------------------------------------------------------
Sub MyTab()
ActiveCell.Offset(0, 2).Select ''neu mun dich 2 Ô
End Sub
--------------------------------------------------------------------------------------------------------------------------

tigertiger
21-11-08, 10:37 PM
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,
.

cadafi
22-11-08, 09:22 AM
chưa hiểu lém pác cho vú dụ cụ thể nhé.
Lâu lâu làm pác một bữa nha: Ví dụ bài dưới đấy anh ongtrungducmx25:
Sub MyTab()
ActiveCell.Offset(0, 2).Select
End Sub
Anh cứ lần lượt thay vào: Offset(0,2) bằng :
Offset(2,1)
Offset(-2,-1)
Offset(0,-1)

Sau đó, tab thử một cái là biết ngay mà!

nghiemkhactienkbnn
22-02-10, 03:49 PM
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.

TrungChinhs
23-02-10, 12:01 PM
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).

donasa
19-05-11, 01:40 PM
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!

vodoi2x
19-05-11, 02:18 PM
sửa thành
Sub MyTab()
ActiveCell.Offset(0, -4).Select
End Sub

donasa
19-05-11, 02:37 PM
sửa thành
Sub MyTab()
ActiveCell.Offset(0, -4).Select
End Sub

Ý em là bấm phím Tab thì nhảy qua 4 cột, bấm Shift + Tab thì trở lại 4 cột ạ!