Làm sao để khung comment không bị che khi dùng free pane?

Liên hệ QC

ST-Lu!

Love Wingchun
Tham gia
19/8/08
Bài viết
730
Được thích
546
Nghề nghiệp
Xích lô một thời
Dữ liệu em có vài ngàn dòng...em dùng free pane để cố định row(1)
Tại các cell của row(1) - Thanh tiêu đề em có insert các comment (nội dung dài)
khi active cell ở dòng đầu, ta đứng tại cell có comment thì cả khung comment sẽ hiện ra đầy đủ để đọc.

Nhưng vấn đề khi active cell ở ô (ví dụ: row(1000) ta để chuột tại một cell ở row(1) thì khung comment bị che mất không đọc được

Vậy làm sao để khắc phục tình trạng này?
 
Dữ liệu em có vài ngàn dòng...em dùng free pane để cố định row(1)
Tại các cell của row(1) - Thanh tiêu đề em có insert các comment (nội dung dài)
khi active cell ở dòng đầu, ta đứng tại cell có comment thì cả khung comment sẽ hiện ra đầy đủ để đọc.

Nhưng vấn đề khi active cell ở ô (ví dụ: row(1000) ta để chuột tại một cell ở row(1) thì khung comment bị che mất không đọc được

Vậy làm sao để khắc phục tình trạng này?
Có thể thay comment bằng data validation thì có "tua" đến cuối bảng thì vẫn hiện nội dung được -khi chon vào ô đó ( không rõ là có dài được bằng comment ko)
 
Có thể thay comment bằng data validation thì có "tua" đến cuối bảng thì vẫn hiện nội dung được -khi chon vào ô đó ( không rõ là có dài được bằng comment ko)
Ác 1 cái là Validation có giới hạn... không phải muốn gõ bao nhiêu ký tự vào đó cũng được đâu!
 
Dữ liệu em có vài ngàn dòng...em dùng free pane để cố định row(1)
Tại các cell của row(1) - Thanh tiêu đề em có insert các comment (nội dung dài)
khi active cell ở dòng đầu, ta đứng tại cell có comment thì cả khung comment sẽ hiện ra đầy đủ để đọc.

Nhưng vấn đề khi active cell ở ô (ví dụ: row(1000) ta để chuột tại một cell ở row(1) thì khung comment bị che mất không đọc được

Vậy làm sao để khắc phục tình trạng này?
Bạn dùng code sau nhé.

Mã:
Sub Dichuyen()
Dim rng As Range
 Dim cTop As Long
 Dim cWidth As Long
 Dim cmt As Comment
 Dim sh As Shape
 
 Application.DisplayCommentIndicator _
    = xlCommentIndicatorOnly
 
 Set rng = ActiveWindow.VisibleRange
 cTop = rng.Top + rng.Height / 2
 cWidth = rng.Left + rng.Width / 2
If ActiveCell.Comment Is Nothing Then
 Else
  Set cmt = ActiveCell.Comment
  Set sh = cmt.Shape
  sh.Top = cTop - sh.Height / 2
  sh.Left = cWidth - sh.Width / 2
  cmt.Visible = True
End If
End Sub

Và bạn nên đưa nó vào Worksheet_SelectionChange để khi chọn nó hiện lại cho đúng.
 

File đính kèm

  • comment.xls
    24.5 KB · Đọc: 45
Lần chỉnh sửa cuối:
Bạn dùng code sau nhé.

Mã:
Sub Dichuyen()
Dim rng As Range
 Dim cTop As Long
 Dim cWidth As Long
 Dim cmt As Comment
 Dim sh As Shape
 
 Application.DisplayCommentIndicator _
    = xlCommentIndicatorOnly
 
 Set rng = ActiveWindow.VisibleRange
 cTop = rng.Top + rng.Height / 2
 cWidth = rng.Left + rng.Width / 2
If ActiveCell.Comment Is Nothing Then
 Else
  Set cmt = ActiveCell.Comment
  Set sh = cmt.Shape
  sh.Top = cTop - sh.Height / 2
  sh.Left = cWidth - sh.Width / 2
  cmt.Visible = True
End If
End Sub
Và bạn nên đưa nó vào Worksheet_SelectionChange để khi chọn nó hiện lại cho đúng.
Code cũng hay!
Nhưng có điều nó sẽ tác động lên mọi Comments.. mà lý ra chỉ nên tác động với các Comment ở các vùng bên phải và phía trên (Vùng ActiveWindow.VisibleRange nên để nguyên)
Cải tiến lại thử:
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim shp As Shape
  Application.DisplayCommentIndicator = 2
  With ActiveWindow.VisibleRange
    If Not ActiveCell.Comment Is Nothing And Intersect(ActiveCell, .Cells) Is Nothing Then
      ActiveCell.Comment.Visible = True
      Set shp = ActiveCell.Comment.Shape
      shp.Top = .Cells(2, 2).Top
      shp.Left = .Cells(2, 2).Left
    End If
  End With
End Sub
 

File đính kèm

  • Test.xls
    22.5 KB · Đọc: 24
Thưa Thầy NDU
Trong Help em chỉ thấy có indicator = 1,-1,0 nhưng không hiểu 2 ở đâu ra vậy?
Hay 2 cũng được hiểu như -1

đoạn code trên mình không cần
PHP:
And Intersect(ActiveCell, .Cells) is nothing

vì nếu đã trong bảng tính excel thì activecell phải intersect với .cells rồi

không biết ý của em có đúng không?
 
Lần chỉnh sửa cuối:
Thưa Thầy NDU
Trong Help em chỉ thấy có indicator = 1,-1,0 nhưng không hiểu 2 ở đâu ra vậy?
Hay 2 cũng được hiểu như -1
Đoạn này:
Application.DisplayCommentIndicator=2
Khi bạn vừa gõ dấu = lập tức thấy có 3 gợi ý bao gồm:
xlCommentAndIndicator
xlCommentIndicatorOnly
xlNoIndicator

Cái tôi cần là mục xlCommentIndicatorOnly đương nhiên nó sẽ = 2 rồi (mục số 2)
đoạn code trên mình không cần
PHP:
And Intersect(ActiveCell, .Cells) is nothing
vì nếu đã trong bảng tính excel thì activecell phải intersect với .cells rồi

không biết ý của em có đúng không?
.Cells khác với Cells à nha
.Cells thuộc With phía trên (có dấu chấm trước chử Cells)
Cells là toàn bộ các cell trong bảng tính
--------------------------------------------
Intersect(ActiveCell, .Cells) ý muốn nói đến ActiveCell khi nó nằm trong khu vực bên phải phía dưới
Nguyên câu:
If Not ActiveCell.Comment Is Nothing And Intersect(ActiveCell, .Cells) Is Nothing Then
Có nghĩa là
Nếu ActiveCell có chứa Comment và không phải nằm trong vùng bên phải phía dưới thì...
-------------------------------
Tóm lại: Tôi muốn code Selection_Change chỉ thực thi khi ta chọn các cell nằm bên trái hoặc phía trên mà thôi ---> Các cell bên phải phía dưới đương nhiên ta nhìn thấy rồi, cần gì đến code ---> đúng không?
 
Web KT
Back
Top Bottom