Lupp gần đây đã tạo ra một bảng tính ví dụ sử dụng macro cho hành vi này. Nó được đăng tại https://forum.openoffice.org/en/forum/viewtopic.php?t=43531#p431848 .
Tuy nhiên, ông nhận xét tại AskLO rằng:
Đó là một cách tiếp cận đáng ngờ để sử dụng "macro" cho mục đích này. Giải pháp chỉ áp dụng cho các trang tính không sử dụng định dạng ô cứng (trực tiếp) ... Không thực sự được đề xuất!
Giải pháp tốt duy nhất sẽ là nếu nó có thể được triển khai trong LibreOffice. Nhưng như bạn có thể đã đọc trong báo cáo lỗi:
Nói chuyện với một trong những nhà phát triển có kinh nghiệm ... đó không phải là một nhiệm vụ tầm thường. Nó có thể không bao giờ được thực hiện.
Như đã đề cập trong câu trả lời của tôi cho câu hỏi tương tự trên AskLO, một giải pháp thực tế là sử dụng định dạng có điều kiện để thêm màu vào các hàng lẻ hoặc chẵn.
CHỈNH SỬA :
Để tái tạo ví dụ của Lupp bắt đầu từ đầu, trước tiên, hãy chuyển đến Công cụ -> Macro -> Sắp xếp macro -> LibreOffice Basic. Tìm tài liệu .ods, nhấn New để tạo mô-đun mới và đặt mã sau vào mô-đun.
Global focusCellAddressGl As String, columnWithFocusCellGl As Long, rowWithFocusCellGl As Long
Function focusCell(Optional pCtrl) As Object
REM Concept by "uros", "Villeroy"
REM Responsible for this variant: Wolfgang Jäger
REM 2017-09-28 V0
On Error Goto eExit
If IsMissing(pCtrl) Then pCtrl = ThisComponent.CurrentController
If NOT pCtrl.SupportsService("com.sun.star.sheet.SpreadsheetView") Then Exit Function
Dim theSheet As Object, fC As Object, sheetNum As Long, sInfo As String, sInfoDelim As String
Dim vD, vDSplit, sInfoSplit
vD = pCtrl.ViewData
vDSplit = Split(vD, ";")
theSheet = pCtrl.ActiveSheet's(sheetNum)
sheetNum = theSheet.RangeAddress.Sheet
sInfo = vDSplit(sheetNum + 3)
REM For CellAddress.Row >= 8192 the "+" is used as the subdelimiter in ViewData. WHY?
If InStr(sInfo, "+")>0 Then
sInfoDelim = "+"
Else
sInfoDelim = "/"
End If
sInfoSplit = Split(sInfo, sInfoDelim)
fC = theSheet.GetCellByPosition(sInfoSplit(0), sInfoSplit(1))
focusCell = fC
eExit:
End Function
Function focusCellAddress(Optional pDummy)
On Error Goto eExit
If focusCellAddressGl="" Then onSelectionChanged(NULL)
focusCellAddress=focusCellAddressGl
eExit:
End Function
Function columnWithFocusCell(Optional pDummy)
On Error Goto eExit
If columnWithFocuscellGl=0 Then onSelectionChanged(NULL)
columnWithFocusCell=columnWithFocusCellGl
eExit:
End Function
Function rowWithFocusCell(Optional pDummy)
On Error Goto eExit
If rowWithFocuscellGl=0 Then onSelectionChanged(NULL)
rowWithFocusCell=rowWithFocusCellGl
eExit:
End Function
Sub onSelectionChanged(pEvent)
On Error Goto eExit
tFC=focusCell()
focusCellAddressGl=Split(tFC.AbsoluteName,".")(1)
With tFC.CellAddress
columnWithFocusCellGl=.Column+1
rowWithfocusCellGl=.Row+1
End With
specCell=tFC.Spreadsheet.GetCellByPosition(0,0)
specCell.String = tFC.AbsoluteName
eExit:
End Sub
Bây giờ, nhấp chuột phải vào tab của trang tính hiện tại và chọn Sự kiện Trang tính . Chỉ định onSelectionChanged
cho sự kiện "Lựa chọn thay đổi".
Ngoài ra, tạo phong cách cfFocusCross
với một màu nền.
Cuối cùng, đi đến Định dạng -> Định dạng có điều kiện -> Quản lý -> Thêm.
- Công thức là
OR(ROW(A1)=ROWWITHFOCUSCELL();COLUMN(A1)=COLUMNWITHFOCUSCELL())+N($A$1)*0
- Áp dụng phong cách
cfFocusCross
- Phạm vi
A1:Z100