Chọn cả nguyên dòng và nguyên cột trong sự kiện select

Liên hệ QC

khongtu19bk

Thành viên hoạt động
Tham gia
5/12/09
Bài viết
147
Được thích
69
Nào cùng thảo luận.
LinK:<Chỉ thành viên trong BQT mới nhìn thấy>
 
Lần chỉnh sửa cuối:
tôi đã cố gắng nhưng thực sự không thể được. Nên muốn nhờ các bạn giúp sức.
Bài toán: khi tôi click vào cell A1 thì lập tức cột A và dòng 1 sẽ được select.

Ai biết xin chỉ giúp mình :(
Việc này là không thể thực hiện được bạn ạ, bạn cứ thử làm thủ công là biết ngay, khi đó toàn bộ bảng tính sẽ được chọn.
Nếu bạn muốn highlight hàng, cột chứa ô hiện hành thì có thể tham khảo topic sau hoặc tìm kiếm với từ khóa Highlight: Dùng Chuột Chọn Cell, Highlight Dòng Và Cột
 
Upvote 0
tôi đã cố gắng nhưng thực sự không thể được. Nên muốn nhờ các bạn giúp sức.
Bài toán: khi tôi click vào cell A1 thì lập tức cột A và dòng 1 sẽ được select.

Ai biết xin chỉ giúp mình :(
Chép code này vào Sheet mà bạn muốn:
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address(0, 0) = "A1" Then Union(Range("1:1"), Range("A:A")).Select
End Sub
 
Upvote 0
Chép code này vào Sheet mà bạn muốn:
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address(0, 0) = "A1" Then Union(Range("1:1"), Range("A:A")).Select
End Sub
Vậy có tổng quát thành việc chọn 1 ô bất kỳ được không anh? Em đã thử câu lệnh này:
PHP:
Union(Target.EntireColumn, Target.EntireRow).Select
nhưng toàn bộ bảng tính đều được chọn.
 
Upvote 0
-Cảm ơn bạn nghiaphuc. Quả thực, mình làm đi làm lại đều đúng như bạn miêu tả.
-Cảm ơn bạn thanhlanh. code của bạn có thể tổng quát lên được không? tức là không chỉ là cell A1 nữa, mà click cell bất kì thì hàng và cột đều được chọn?
Mình thử code của bạn và thấy nó ổn khi copy code vào sheet mình muốn, nhưng cho code vào this work book để chạy trên các sheet khác thì ko được, có thể làm cho code này chạy trên all các sheet trên work book đó hay ko?

To nghiaphuc: Mình nghĩ code của bạn ko được vì:
target là đối tượng được select. Nhưng khi bạn select như vậy thì code đó chạy liên tục vì đối tượng được select lúc này là cả hàng và cả cột => code chạy cho toàn bộ vùng đc select và vì vậy nó sẽ chạy liên hoàn cho tới khi kín bảng tính.

Còn của thanhlanh đã ràng buộc, target có địa chỉ cụ thể là A1 thì code mới có hiệu lực thực thi. tuy nhiên ở code của thanhlanh, mình ko hiểu hai số (0,0) có ý nghĩa gì, có thể giải thích giúp mình đc ko?
PHP:
Target.Address(0, 0)
 
Lần chỉnh sửa cuối:
Upvote 0
tôi đã cố gắng nhưng thực sự không thể được. Nên muốn nhờ các bạn giúp sức.
Bài toán: khi tôi click vào cell A1 thì lập tức cột A và dòng 1 sẽ được select.

Ai biết xin chỉ giúp mình :(
Từ việc làm Range("3:3,F:F").Select (chẳng hạn) tôi nghĩ ra như sau
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Cot As String, Hang As Long
Dim Str As String
If Target.Count > 1 Then Exit Sub
Str = "ABCDEFGHIJKLMNOPQRSTUVWXY"
Cot = Mid(Str, Target.Column, 1)
Hang = Target.RowRange(Hang & ":" & Hang & "," & Cot & ":" & Cot).Select
End Sub
Thấy không hay lắm nhưng dùng được
Tôi thử theo dạng sau mãi không được
PHP:
Range(Rows(Target.Row) & "," & Columns(Target.Column)).Select
 
Lần chỉnh sửa cuối:
Upvote 0
Cuối cùng cũng nghĩ ra được như sau
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
Range(Rows(Target.Row).Address & "," & Columns(Target.Column).Address).Select
Target.Activate
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
PHP:
Range(Rows(Target.Row) & "," & Columns(Target.Column)).Select
nếu thử được dạng này cũng có nghĩa rằng code của bác chạy được tổng quát.
Đoạn code trên của bác đã chạy rất tốt trong một phạm vi chưa phải là tổng quát,rất thú vị.
Cảm ơn bác nhiều nhiều :)

Vẫn muốn thắc mắc thêm một chút ở đoạn code trên.
Tại sao là
PHP:
Range(Hang & ":" & Hang & "," & Cot & ":" & Cot).Select
mà không phải là:
PHP:
Range(& Hang & ":" & Hang & "," & Cot & ":" & Cot).Select
 
Upvote 0
PHP:
Range(Rows(Target.Row) & "," & Columns(Target.Column)).Select
nếu thử được dạng này cũng có nghĩa rằng code của bác chạy được tổng quát.
Đoạn code trên của bác đã chạy rất tốt trong một phạm vi chưa phải là tổng quát,rất thú vị.
Cảm ơn bác nhiều nhiều :)

Vẫn muốn thắc mắc thêm một chút ở đoạn code trên.
Tại sao là
PHP:
Range(Hang & ":" & Hang & "," & Cot & ":" & Cot).Select
mà không phải là:
PHP:
Range(& Hang & ":" & Hang & "," & Cot & ":" & Cot).Select
Cả 2 cách giống nhau bạn à. Tuy nhiên Bạn làm theo cách của bài #7 đi nhé
 
Upvote 0
Cuối cùng cũng nghĩ ra được như sau
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Range(Rows(Target.Row).Address & "," & Columns(Target.Column).Address).Select
Target.Activate
End Sub
lạ nhỉ, em click thử cell E17 thì cột A cứ được select là sao ạ, hjc

++++++++++++++++++++

OK được rồi bác ạ, thanks bác nhiều :)
Cái address thật hay :)

Cái này mà cho code được vào this work book để chạy trên all các sheet thì ngon ^^
 
Lần chỉnh sửa cuối:
Upvote 0
Em thử rồi bác ạ, chạy vi vu, ngon thiệt.
Bác có cách nào để chạy đc trên all các sheet mà ko phải cho code vào all các sheet ko?
Em thử cho code vào this work book mà ko đc :(
Private Sub Workbook_SheetSelectionChange(ByVal Target As Range ....
 
Upvote 0
-Cảm ơn bạn thanhlanh. code của bạn có thể tổng quát lên được không? tức là không chỉ là cell A1 nữa, mà click cell bất kì thì hàng và cột đều được chọn?
Mình thử code của bạn và thấy nó ổn khi copy code vào sheet mình muốn, nhưng cho code vào this work book để chạy trên các sheet khác thì ko được, có thể làm cho code này chạy trên all các sheet trên work book đó hay ko?
Để code có hiệu lực trên tất cả các sheet thì bạn đưa dãy lệnh vào trong Sub Workbook_SheetSelectionChange của đối tượng ThisWorkbook và nhớ là thay vì viết Range("1:1"), bạn phải viết Sh.Range("1:1")
Còn của thanhlanh đã ràng buộc, target có địa chỉ cụ thể là A1 thì code mới có hiệu lực thực thi. tuy nhiên ở code của thanhlanh, mình ko hiểu hai số (0,0) có ý nghĩa gì, có thể giải thích giúp mình đc ko?
PHP:
Target.Address(0, 0)
Cặp số (0,0) này chỉ ô đầu tiên của vùng chọn (Target). Chẳng hạn bạn chọn vùng A3:C10 thì Target.Address(0, 0) là A3.
@viehoai: Câu lệnh trong bài #6 của bác làm người khác lại hiểu nhầm là câu lệnh sai:
PHP:
Hang = Target.RowRange(Hang & ":" & Hang & "," & Cot & ":" & Cot).Select
Hóa ra đây là 2 câu lệnh:
PHP:
Hang = Target.Row
Range(Hang & ":" & Hang & "," & Cot & ":" & Cot).Select
 
Lần chỉnh sửa cuối:
Upvote 0
bạn chạy code của bác ấy như sau:
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Count > 1 Then Exit Sub
Range(Rows(Target.Row).Address & "," & Columns(Target.Column).Address).Select
Target.Activate
End Sub


cách của bạn chỉ việc đưa vào các sheets bằng việc ghi thêm tên sheet vào cũng là việc quá thủ công, không ổn. có cách nào lấy tên sheet được kích hoạt một cách tự động ko?
 
Upvote 0
Em thử rồi bác ạ, chạy vi vu, ngon thiệt.
Bác có cách nào để chạy đc trên all các sheet mà ko phải cho code vào all các sheet ko?
Em thử cho code vào this work book mà ko đc :(
Private Sub Workbook_SheetSelectionChange(ByVal Target As Range ....
Bạn đã biết đưa code vào sự kiện Workbook_SheetSelectionChange mà sao lại không được nhỉ?
Nó là như vầy nè:
PHP:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    Range(Rows(Target.Row).Address & "," & Columns(Target.Column).Address).Select
    Target.Activate
End Sub
Còn nếu bạn muốn code chỉ có tác dụng trên một số sheet chỉ định (chẳng hạn các sheet Sheet1, Sheet3, Sheet5, Sheet10) thì sửa lại như sau:
PHP:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    Const ApplySh As String = ".Sheet1.Sheet3.Sheet5.Sheet10."
    If InStr(ApplySh, Sh.Name) = 0 Or Target.Count > 1 Then Exit Sub
    Range(Rows(Target.Row).Address & "," & Columns(Target.Column).Address).Select
    Target.Activate
End Sub
Muốn áp dụng trên sheet nào thì đưa tên sheet đó vào trong hằng ApplySh là được.
 
Lần chỉnh sửa cuối:
Upvote 0
Đã chạy ổn trên mọi sheet
copy code sau vào this work book

PHP:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

If Target.Count > 1 Then Exit Sub
Range(Rows(Target.Row).Address & "," & Columns(Target.Column).Address).Select
Target.Activate

End Sub

cảm ơn bác viehoai nhiều :)
 
Upvote 0
Vậy có tổng quát thành việc chọn 1 ô bất kỳ được không anh? Em đã thử câu lệnh này:
PHP:
Union(Target.EntireColumn, Target.EntireRow).Select
nhưng toàn bộ bảng tính đều được chọn.
Thì vậy nha (múa rìu qua mắt thợ rồi):
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub    'tu?  ý n?u mu?n ch? tác d?ng khi ch?n m?t cell
    Application.EnableEvents = False
    Union(Target.EntireColumn, Target.EntireRow).Select
    Application.EnableEvents = True
End Sub
Còn để chạy trên tất cả các sheet ---> thấy các bạn nói rồi.

Target.Address(0, 0) ---> lấy địa chỉ tương đối (ở đây là A1)
Target.Address ---> lấy địa chỉ tuyệt đối (ở đây là $A$1)
 
Upvote 0
Thì vậy nha (múa rìu qua mắt thợ rồi):
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub    'tu?  ý n?u mu?n ch? tác d?ng khi ch?n m?t cell
    Application.EnableEvents = False
    Union(Target.EntireColumn, Target.EntireRow).Select
    Application.EnableEvents = True
End Sub
Chà chà, cái này mới hay đây nè, em hình dung ra cái vụ Union(Target.EntireColumn, Target.EntireRow).Select nhưng lại không biết kết hợp với Application.EnableEvents. Cảm ơn anh nhiều nhiều.
Bây giờ sửa code thêm một xíu là chấp luôn việc chọn 1 ô hay nhiều ô:
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Application.EnableEvents = False
    Union(Selection.EntireColumn, Selection.EntireRow).Select
    Application.EnableEvents = True
    Target.Activate
End Sub
Còn cái này:
Target.Address(0, 0) ---> lấy địa chỉ tương đối (ở đây là A1)
Target.Address ---> lấy địa chỉ tuyệt đối (ở đây là $A$1)
Hóa ra em nói trật lất... (ẹc ẹc...xấu hổ quá đi mất!)
 
Lần chỉnh sửa cuối:
Upvote 0
Chà chà, cái này mới hay đây nè, em hình dung ra cái vụ Union(Target.EntireColumn, Target.EntireRow).Select nhưng lại không biết kết hợp với Application.EnableEvents. Cảm ơn anh nhiều nhiều.
Bây giờ sửa code thêm một xíu là chấp luôn việc chọn 1 ô hay nhiều ô:
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Application.EnableEvents = False
    Union(Selection.EntireColumn, Selection.EntireRow).Select
    Application.EnableEvents = True
    Target.Activate
End Sub
Vẫn cứ là Target thôi chứ Selection làm gì
Tức:
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Application.EnableEvents = False
  Union(Target.EntireColumn, Target.EntireRow).Select
  Application.EnableEvents = True
  Target.Activate
End Sub
Nên nhớ rằng Target không phải hiểu là 1 cell đâu
 
Upvote 0
Bác viehoai đã rất khéo léo khi cho thêm dòng code

PHP:
If Target.Count > 1 Then Exit Sub
Càng ngẫm càng thấy chỗ này thật khéo léo :)
 
Upvote 0
Web KT

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

Back
Top Bottom