RaoVat24h
Excel Office

Highlight hàng khi di chuyển chuột – Highlight row when moving the mouse

Advertisement

Highlight hàng khi di chuyển chuột – Highlight row when moving the mouse 
có nhiều bài viết về vấn đề này, tôi xin chọn ra 2 tập tin tương đương với 2 cách để đưa vào đây.

Cách thứ nhất: là dùng Conditional Formatting.
Các bạn thực hiện các bước như hình:
Bước 1: Chọn vùng bạn muốn highlight (tô màu) khi di chuyển.
Bước 2: Chọn Conditional Formatting > Use a formula to determine which cells to format và nhập vào công thức

Mã:
=ROW()=CELL("ROW")

(Bạn chú ý hai hàm ROW và CELL ở trong công thức – Các bạn có thể đọc phần help về hai hàm này)
Các bạn cũng có thể phối hợp các hàng khác, để khi bạn di chuyển phải bảo đảm rằng giá trị công thức trả về khi bạn chọn hàng hiện hành là TRUE.

Sau đó chọn định dạng như: Bold, màu nền, màu chữ,… theo ý của bạn. Cuối cùng chọn nút “OK” để áp dụng.

Bước cuối cùng là đưa vào thủ tục sự kiện

Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = True
End Sub

Như vậy bạn khi di chuyển ô chọn bạn sẽ thấy định dạng theo như bạn muốn.
Các bạn có thể download tập tin tại đây.

Cách trên được đưa ra bởi bạn hoangminhtien.

Cách thứ hai: là kết hợp giữa các hàm Window API.
Cách này của thành viên rollover79.
Ở cách này tác giả có hai nút để các bạn quyết định bắt đầu hay không bắt đầu Highlight.

Để thực hiện, các bạn hãy tạo một module và đưa đoạn mã sau vào:

Mã:
Private Declare Function SetTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long) As Long
Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Public Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long

Public curCell As Range

Public Type POINTAPI
X As Long
Y As Long
End Type

Private CursorPos As POINTAPI
Private CursorCell As Range
Public bActive As Boolean

[COLOR="#008000"]' Thủ tục này sẽ được gọi khi bạn muốn bắt đầu quá trình Highlight hàng[/COLOR]
Sub Active()
On Error Resume Next
If bActive Then Exit Sub
SetTimer Application.hWnd, 1, 250, AddressOf RowAlternative
bActive = True
End Sub

[COLOR="#008000"]' Thủ tục này sẽ được gọi khi bạn muốn kết thúc quá trình Highlight hàng[/COLOR]
Sub DeActive()
On Error Resume Next
bActive = False
KillTimer Application.hWnd, 1
ActiveSheet.Rows(curCell.Row).FormatConditions(1).Delete
End Sub

[COLOR="#008000"]' Thủ tục chính để tô màu hàng tại vị trí con trỏ[/COLOR]
Private Function RowAlternative()
On Error Resume Next

Dim RetVal As Long
RetVal = GetCursorPos(CursorPos)
RetVal = WindowFromPoint(CursorPos.X, CursorPos.Y)

[COLOR="#008000"]' Sẽ không thực hiện nếu ứng dụng không phải là Excel[/COLOR]
If (Application.Name <> "Microsoft Excel") Then Exit Function
Set CursorCell = Application.Windows(1).RangeFromPoint(CursorPos.X, CursorPos.Y)

If Err.Number = 0 Then
[COLOR="#008000"] ' Thực hiện xóa tô màu ở hàng cũ, và tô màu ở hàng mới[/COLOR]
If CursorCell.Address <> curCell.Address Then
ActiveSheet.Rows(curCell.Row).FormatConditions(1).Delete
Set curCell = CursorCell
ActiveSheet.Rows(curCell.Row).FormatConditions.Add xlExpression, , "=true"
ActiveSheet.Rows(curCell.Row).FormatConditions(1).Interior.ColorIndex = 24
End If
End If
End Function

Nguyên tắc của cách hai là, dùng các hàm API để xác định vị trí của chuột và tô màu ở hàng này. Đây là một cách làm sáng tạo.
Như vậy với cách làm này thì khi bạn di chuyển bằng các phím mủi tên thì cách này không thể áp dụng được.

Các bạn có thể tải tập tin tại đây.

Link của topic nói về vấn đề này tại đây.

Cách thứ ba: là dựa vào thủ tục sự kiện Worksheet_SelectionChange.

Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
Const cnNUMCOLS As Long = 256
[COLOR="#00FF00"] ' Màu mặc định là màu vàng[/COLOR]
Const cnHIGHLIGHTCOLOR As Long = 36 '
Static rOld As Range
Static nColorIndices(1 To cnNUMCOLS) As Long
Dim i As Long
If Not rOld Is Nothing Then [COLOR="#00FF00"] ' Phục hồi lại màu nền của ô cũ[/COLOR]
With rOld.Cells
If .Row = ActiveCell.Row Then Exit Sub [COLOR="#00FF00"]' Cùng một hàng không phục hồi[/COLOR]
For i = 1 To cnNUMCOLS
.Item(i).Interior.ColorIndex = nColorIndices(i)
Next i
End With
End If
Set rOld = Cells(ActiveCell.Row, 1).Resize(1, cnNUMCOLS)
With rOld
For i = 1 To cnNUMCOLS
nColorIndices(i) = .Item(i).Interior.ColorIndex
Next i
.Interior.ColorIndex = cnHIGHLIGHTCOLOR
End With
End Sub

Với đoạn mã ở trên, việc thực thi sẽ chậm nếu có nhiều ô trong cùng một hàng phải phục hồi màu nền.

Hoặc đơn giản hơn ta có thể dùng đoạn mã sau:

Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
Cells.Interior.ColorIndex = xlColorIndexNone
ActiveCell.EntireRow.Interior.ColorIndex = 36
End Sub

Nguồn: http://www.mcgimpsey.com/excel/highlightrow.html

File đính kèm

?DienDan.Edu.Vn cám ơn bạn đã quan tâm và rất vui vì bài viết đã đem lại thông tin hữu ích cho bạn. https://diendan.edu.vn/
?Các bạn tham khảo hướng dẫn tải file trên Quản Trị Excel tại đây: http://www.quantriexcel.info/2018/11/huong-dan-tai-file-tren-quan-tri-excel.html

Rate this post

DienDan.Edu.Vn

DienDan.Edu.Vn Cám ơn bạn đã quan tâm và rất vui vì bài viết đã đem lại thông tin hữu ích cho bạn.
DienDan.Edu.Vn! là một website với tiêu chí chia sẻ thông tin,... Bạn có thể nhận xét, bổ sung hay yêu cầu hướng dẫn liên quan đến bài viết. Vậy nên đề nghị các bạn cũng không quảng cáo trong comment này ngoại trừ trong chính phần tên của bạn.
Cám ơn.

Đăng bình luận

(+84) (918) 369.468