SetFocus, ý nghĩa và cách sử dụng

Liên hệ QC

chisinhvnn

Thành viên tiêu biểu
Tham gia
7/3/08
Bài viết
479
Được thích
104
GPE cho mình hỏi trong vba, SetFocus có ý nghĩa như thế nào vậy, và cách dùng. Mình thấy một số đoạn code sử dụng nhưng không hiểu cho lắm. (mình hiểu như vậy không biết có đúng không. Mình đặt 1 điều kiện, nếu thỏa mãn thì code tiếp tục chạy, còn không thỏa mãng code sẽ dừng lại vị trí đặt SetFocus)
 
GPE cho mình hỏi trong vba, SetFocus có ý nghĩa như thế nào vậy, và cách dùng. Mình thấy một số đoạn code sử dụng nhưng không hiểu cho lắm. (mình hiểu như vậy không biết có đúng không. Mình đặt 1 điều kiện, nếu thỏa mãn thì code tiếp tục chạy, còn không thỏa mãng code sẽ dừng lại vị trí đặt SetFocus)
Phương pháp SetFocus để thiết lập con trỏ chuột tập trung vào 1 Control cụ thể nào đó, có thể là TextBox chẳng hạn. Nếu chọn Control đó và vào cửa sổ Properties thiết lập Visble=False thì sẽ bị vô hiệu hoặc không hiển thị, phương pháp này sẽ không được thực hiện.

Ví dụ: Trên UserForm sử dụng TextBox có tên là tbxTTVaoSo, nếu không nhập số vào sổ trong TextBox này thì sẽ hiện thông báo.


Mã:
If Me.tbxTTVaoSo.Value = "" Then
        MsgBox "Chua Nhap SÓ VÀO SO", vbExclamation, "THEO DOI CÔNG VAN"
        Me.tbxTTVaoSo.SetFocus
        Exit Sub
End If
 
Upvote 0
Một cách khác cụ thể hơn với 2 cách SetFocus:
- Cách 1: Khi mở Form thì nó chọn TextBox đầu tiên là TextBox1 có tên là Tiền hàng, khi gõ tên hàng và số tiền rồi nhấn nút tính toán để xem kết quả.

- Cách 2: Khi nhấn nút Làm trống Form thì con trỏ chuột trở lại TextBox đầu tiên là TextBox1

Mã:
Private Sub UserForm_Activate()
    TextBox1.SetFocus
End Sub

Private Sub cmdLamTrongForm_Click()
    TextBox1 = " "
    TextBox2 = " "
    TextBox3 = " "
    TextBox4 = " "
    TextBox1.SetFocus
End Sub
 

File đính kèm

  • UserForm SetFocus.xlsm
    16.8 KB · Đọc: 39
Lần chỉnh sửa cuối:
Upvote 0
SetFocus không phải để thiết lập con trỏ chuột tập trung vào 1 Control cụ thể nào đó.

Ta phân biệt:
1. trỏ chuột: bình thường nó là cái mũi tên mà khi bạn di chuyển con chuột thì bạn nhìn thấy nó di chuyển trên màn hình. Cái này trong Windows gọi là cursor.

2. Trỏ văn bản: khi bạn click vào một chỗ nào đó trong Word, trong notepad, trongTextBox thì bạn nhìn thấy một cái gạch đứng nhấp nháy. Khi bạn gõ lần lượt các phím thì cái gạch đứng nhấp nháy này nó sẽ di chuyển trong văn bản. Cái gạch đứng nhấp nháy nài gọi là caret

SetFocus không phải để thiết lập con trỏ chuột (cursor) hay trỏ văn bản (caret) tập trung vào 1 Control cụ thể nào đó. Nói chính xác thì SetFocus "đưa" focus vào Control. Tức xác định control này sẽ thâu tóm mọi input từ bàn phím. Luôn chỉ có 1 "vị" thâu tóm input từ bàn phím trong mỗi thời điểm.

SetFocus không đưa trỏ chuột (cursor) và cũng không đưa trỏ văn bản (caret) vào control. Không tin thì thử biết ngay
Mã:
Private Sub ComboBox1_Change()
    CommandButton1.SetFocus
End Sub
Trong CommandButton1 làm gì có trỏ chuột (cursor) và trỏ văn bản (caret)?

Khái niệm focus chả liên quan gì tới cursor và caret. Tất nhiên trong Windows nếu window nào đó thuộc lớp Edit thì khi window đó có focus thì system sẽ tự hiển thị caret trong window đó. Trong VBA tương tự. Nhưng bản thân SetFocus chỉ là tập trung focus vào control mà thôi.

Nói chuyện với nhau thì thế nào cũng được nhưng giải thích theo yêu cầu thì phải chính xác.

SetFocus để làm gì?

Ví dụ bạn có nhiều TextBox và bạn muốn khi hiển thị Form thì TextBox5 sẽ có focus. Để có thể nhấn phím nhập liệu luôn. Nếu không thì hoặc bạn phải dùng TAB để di chuyển tới TextBox5 để nhập liệu. Cách dùng phím sẽ lâu hơn dùng chuột. Bởi bạn click trỏ chuột ở đâu thì focus sẽ ở đó luôn.

Nếu CommandButton1 đang có focus thì thay vì click chuột bạn có thể nhấn phím Enter để thực hiện code CommandButton1_Click. Vậy thì rất có thể bạn muốn là khi chọn mục trong ComboBox1 thì tập trung focus vào CommandButton1 để có thể đập ngay vào Enter và thực hiện CommandButton1_Click (thay vì dùng TAB di chuyển tới CommandButton1 hoặc click trỏ chuột vào CommandButton1).

Nói chung nếu bạn đã hỏi SetFocus để làm gì thì chắc chắn là bạn chưa có nhu cầu.

control.SetFocus là tập trung focus vào control. Tức làm cho control là "vị" sẽ nhận mọi input từ bàn phím.
 
Upvote 0
SetFocus không phải để thiết lập con trỏ chuột tập trung vào 1 Control cụ thể nào đó.

Ta phân biệt:
1. trỏ chuột: bình thường nó là cái mũi tên mà khi bạn di chuyển con chuột thì bạn nhìn thấy nó di chuyển trên màn hình. Cái này trong Windows gọi là cursor.

2. Trỏ văn bản: khi bạn click vào một chỗ nào đó trong Word, trong notepad, trongTextBox thì bạn nhìn thấy một cái gạch đứng nhấp nháy. Khi bạn gõ lần lượt các phím thì cái gạch đứng nhấp nháy này nó sẽ di chuyển trong văn bản. Cái gạch đứng nhấp nháy nài gọi là caret

SetFocus không phải để thiết lập con trỏ chuột (cursor) hay trỏ văn bản (caret) tập trung vào 1 Control cụ thể nào đó. Nói chính xác thì SetFocus "đưa" focus vào Control. Tức xác định control này sẽ thâu tóm mọi input từ bàn phím. Luôn chỉ có 1 "vị" thâu tóm input từ bàn phím trong mỗi thời điểm.

SetFocus không đưa trỏ chuột (cursor) và cũng không đưa trỏ văn bản (caret) vào control. Không tin thì thử biết ngay
Mã:
Private Sub ComboBox1_Change()
    CommandButton1.SetFocus
End Sub
Trong CommandButton1 làm gì có trỏ chuột (cursor) và trỏ văn bản (caret)?

Khái niệm focus chả liên quan gì tới cursor và caret. Tất nhiên trong Windows nếu window nào đó thuộc lớp Edit thì khi window đó có focus thì system sẽ tự hiển thị caret trong window đó. Trong VBA tương tự. Nhưng bản thân SetFocus chỉ là tập trung focus vào control mà thôi.

Nói chuyện với nhau thì thế nào cũng được nhưng giải thích theo yêu cầu thì phải chính xác.

SetFocus để làm gì?

Ví dụ bạn có nhiều TextBox và bạn muốn khi hiển thị Form thì TextBox5 sẽ có focus. Để có thể nhấn phím nhập liệu luôn. Nếu không thì hoặc bạn phải dùng TAB để di chuyển tới TextBox5 để nhập liệu. Cách dùng phím sẽ lâu hơn dùng chuột. Bởi bạn click trỏ chuột ở đâu thì focus sẽ ở đó luôn.

Nếu CommandButton1 đang có focus thì thay vì click chuột bạn có thể nhấn phím Enter để thực hiện code CommandButton1_Click. Vậy thì rất có thể bạn muốn là khi chọn mục trong ComboBox1 thì tập trung focus vào CommandButton1 để có thể đập ngay vào Enter và thực hiện CommandButton1_Click (thay vì dùng TAB di chuyển tới CommandButton1 hoặc click trỏ chuột vào CommandButton1).

Nói chung nếu bạn đã hỏi SetFocus để làm gì thì chắc chắn là bạn chưa có nhu cầu.

control.SetFocus là tập trung focus vào control. Tức làm cho control là "vị" sẽ nhận mọi input từ bàn phím.

Bài giải thích quá ư dễ hiểu.
Cảm ơn anh !
 
Upvote 0
SetFocus không phải để thiết lập con trỏ chuột tập trung vào 1 Control cụ thể nào đó.


Nói chung nếu bạn đã hỏi SetFocus để làm gì thì chắc chắn là bạn chưa có nhu cầu.
Đang tìm hiểu để đưa vào form bạn àh. Copy code trên diễn đàn mà chưa hiểu để áp dụng. Giờ cũng thông 1 phần nào đó rồi
 
Upvote 0
Vậy còn trên một sheet excel, khi thực hiện lưu xong thì muốn tự động trỏ chuột vào một ô B2 thì phải làm sao ạ?
 
Upvote 0
SetFocus không phải để thiết lập con trỏ chuột tập trung vào 1 Control cụ thể nào đó.

Ta phân biệt:
1. trỏ chuột: bình thường nó là cái mũi tên mà khi bạn di chuyển con chuột thì bạn nhìn thấy nó di chuyển trên màn hình. Cái này trong Windows gọi là cursor.

2. Trỏ văn bản: khi bạn click vào một chỗ nào đó trong Word, trong notepad, trongTextBox thì bạn nhìn thấy một cái gạch đứng nhấp nháy. Khi bạn gõ lần lượt các phím thì cái gạch đứng nhấp nháy này nó sẽ di chuyển trong văn bản. Cái gạch đứng nhấp nháy nài gọi là caret

SetFocus không phải để thiết lập con trỏ chuột (cursor) hay trỏ văn bản (caret) tập trung vào 1 Control cụ thể nào đó. Nói chính xác thì SetFocus "đưa" focus vào Control. Tức xác định control này sẽ thâu tóm mọi input từ bàn phím. Luôn chỉ có 1 "vị" thâu tóm input từ bàn phím trong mỗi thời điểm.

SetFocus không đưa trỏ chuột (cursor) và cũng không đưa trỏ văn bản (caret) vào control. Không tin thì thử biết ngay
Mã:
Private Sub ComboBox1_Change()
    CommandButton1.SetFocus
End Sub
Trong CommandButton1 làm gì có trỏ chuột (cursor) và trỏ văn bản (caret)?

Khái niệm focus chả liên quan gì tới cursor và caret. Tất nhiên trong Windows nếu window nào đó thuộc lớp Edit thì khi window đó có focus thì system sẽ tự hiển thị caret trong window đó. Trong VBA tương tự. Nhưng bản thân SetFocus chỉ là tập trung focus vào control mà thôi.

Nói chuyện với nhau thì thế nào cũng được nhưng giải thích theo yêu cầu thì phải chính xác.

SetFocus để làm gì?

Ví dụ bạn có nhiều TextBox và bạn muốn khi hiển thị Form thì TextBox5 sẽ có focus. Để có thể nhấn phím nhập liệu luôn. Nếu không thì hoặc bạn phải dùng TAB để di chuyển tới TextBox5 để nhập liệu. Cách dùng phím sẽ lâu hơn dùng chuột. Bởi bạn click trỏ chuột ở đâu thì focus sẽ ở đó luôn.

Nếu CommandButton1 đang có focus thì thay vì click chuột bạn có thể nhấn phím Enter để thực hiện code CommandButton1_Click. Vậy thì rất có thể bạn muốn là khi chọn mục trong ComboBox1 thì tập trung focus vào CommandButton1 để có thể đập ngay vào Enter và thực hiện CommandButton1_Click (thay vì dùng TAB di chuyển tới CommandButton1 hoặc click trỏ chuột vào CommandButton1).

Nói chung nếu bạn đã hỏi SetFocus để làm gì thì chắc chắn là bạn chưa có nhu cầu.

control.SetFocus là tập trung focus vào control. Tức làm cho control là "vị" sẽ nhận mọi input từ bàn phím.
Có cách nào xác định một vị trí cho trỏ chuột không ạ?
 
Upvote 0
Vậy còn trên một sheet excel, khi thực hiện lưu xong thì muốn tự động trỏ chuột vào một ô B2 thì phải làm sao ạ?
Trỏ chuột vào 1 ô (tức là đưa cursor chuột vào đúng vị trí ô đó trên màn hình) thì phức tạp. Còn muốn ô đó hoạt động (tức chỉ cần gõ phím là chữ được nhập ngay vào ô đó) thì chỉ cần lệnh Range("B2"). Activate
 
Upvote 0
Bạn muốn đưa trỏ chuột tới button để làm gì? Button ở trên sheet hay UserForm?
đưa lên sheet đó anh, lí do vì em có làm một bảng theo dõi sản lượng của dây chuyền. khi ấn nút thì tăng đơn vị sản phẩm. nhưng trong quá trình hoạt động chuột bị lệch ra khỏi nút ấn.
 
Upvote 0
đưa lên sheet đó anh, lí do vì em có làm một bảng theo dõi sản lượng của dây chuyền. khi ấn nút thì tăng đơn vị sản phẩm. nhưng trong quá trình hoạt động chuột bị lệch ra khỏi nút ấn.
Chả nhẽ tôi phải moi từng thông tin từ bạn?

Nút trên sheet? Đó là CommandButton từ ActiveX Controls hay Button từ Forms Controls? Khi nào thì dịch chuyển cursor? Tôi liệt kê vài trường hợp, bạn có thể có trường hợp khác:

- kết nối với bạn gái. Khi nào có tin nhắn từ bạn gái thì dịch chuyển cursor.
- bật loa. Khi nào thấy kẻng nghỉ trưa thì dịch chuyển cursor.
- khi nhấn Button 2 thì dịch cursor vào giữa Button 1.

Mà thôi, tôi cho ví dụ trường hợp 3. Bạn không mô tả kỹ, không đính kèm tập tin thì bây giờ tự tích hợp code vào tập tin của mình.
 

File đính kèm

  • setcursorpos.xlsm
    20.2 KB · Đọc: 23
Upvote 0
Chả nhẽ tôi phải moi từng thông tin từ bạn?

Nút trên sheet? Đó là CommandButton từ ActiveX Controls hay Button từ Forms Controls? Khi nào thì dịch chuyển cursor? Tôi liệt kê vài trường hợp, bạn có thể có trường hợp khác:

- kết nối với bạn gái. Khi nào có tin nhắn từ bạn gái thì dịch chuyển cursor.
- bật loa. Khi nào thấy kẻng nghỉ trưa thì dịch chuyển cursor.
- khi nhấn Button 2 thì dịch cursor vào giữa Button 1.

Mà thôi, tôi cho ví dụ trường hợp 3. Bạn không mô tả kỹ, không đính kèm tập tin thì bây giờ tự tích hợp code vào tập tin của mình.
Mãi Đỉnh. Em xin lỗi vì đã không ghi rõ ràng. Chân thành cảm ơn ví dụ của Bác. Quá Tuyệt vời.

Từ ví dụ của Bác em có thể áp dụng vào file mình mặc dù không hiểu hiết!

Bác có các tài liệu liên quan đến khai báo API, nếu có thể share cho em tìm hiểu với được không ạ.

Một lần nữa, trân trọng cảm ơn Bác.
 
Upvote 0
Bác có các tài liệu liên quan đến khai báo API, nếu có thể share cho em tìm hiểu với được không ạ.
Tìm trên mạng thôi. Vd. vào trang


-> click vào link đỏ

vba7.jpg

Hoặc vào thẳng trang


-> nhấn Download để tải về và cài đặt Office2010Win32API_PtrSafe.exe. Trong thư mục mới được tạo C:\Office 2010 Developer Resources có 3 tập tin mà trong Win32API_PtrSafe.txt có khai báo các cấu trúc, hằng số và hàm API cho VBA7.

Còn về < VBA7 thì có thể dùng API Text Viewer có khi cài VB6 hoặc tìm trên mạng.

Muốn đọc tài liệu thì vào google và tìm vd. VB7
 
Upvote 0
Web KT

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

Back
Top Bottom