Любое предложение о том, как настроить выделение горизонтальной строки / окна, которое остается в той же фиксированной позиции на экране, пока я прокручиваю строки вверх и вниз? Я имею в виду своего рода горизонтальную панель замораживания, которая позволяет выделять строки, когда они проходят через них при прокрутке. Чтобы быть более понятным, скажем, что теперь у меня выделена строка 20. Если я прокручиваю вниз на 1 строку, теперь у меня выделена строка 21 и так далее. Например, если бы я поместил на монитор цветную прозрачную ленту, и строки подсвечиваются, когда они проходят под ним. Можно ли настроить макрос или код VBA для этого?
2 ответа
Основной проблемой является обнаружение события прокрутки (подробности на CPearson.com)
Если вы хотите прокрутить, используя стрелки вверх и вниз (только клавиатура), попробуйте код ниже
В модуль ThisWorkbook добавьте:
Option Explicit
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Application.EnableEvents = False
HighlightCurrentRow Sh, Target
Application.EnableEvents = True
End Sub
В стандартный модуль добавить:
Option Explicit
Public Sub HighlightCurrentRow(ByVal Sh As Object, ByVal Target As Range)
Dim ur As Range, thisRow As Long, prevRow As Long, found As Range
Dim back1 As Long, fore1 As Long, back2 As Long, fore2 As Long
back2 = RGB(111, 0, 0) 'Background color - dark red
fore2 = RGB(255, 255, 0) 'Foreground color - yellow
Set ur = Sh.UsedRange
thisRow = Target.Row
Application.FindFormat.Interior.Color = back2
Set found = ur.Cells.Find(What:="", After:=ur.Cells(1), SearchFormat:=True)
If Not found Is Nothing Then
prevRow = IIf(found.Row < ur.Rows.Count, found.Row + 1, found.Row - 1)
back1 = ur.Cells(prevRow, ur(1).Column).Interior.Color
fore1 = ur.Cells(prevRow, ur(1).Column).Font.Color
ur.Rows(found.Row).Interior.Color = back1
ur.Rows(found.Row).Font.Color = fore1
End If
If Target.Row > 1 And Not Intersect(ur, Target) Is Nothing Then
If thisRow > 15 Then Application.ActiveWindow.ScrollRow = thisRow - 15
ur.Rows(thisRow).Interior.Color = back2
ur.Rows(thisRow).Font.Color = fore2
End If
End Sub
Теперь на любом листе, когда вы щелкаете ячейку с данными, вся строка будет выделена темно-красным фоном и желтым шрифтом.
Если активная ячейка находится в строке 16 или выше, окно будет прокручиваться вверх или вниз (строка прокрутки смещена на 15 строк), и активная строка будет выделена, но если ячейка находится за пределами UsedRange, строки не будут выделены
@ design95, по вашему желанию я хотел бы показать вам, как подсвечивать каждую 20-ю строку, считайте с 1-й строки.
Следуй этим шагам.
- Выберите диапазон данных, например (A1:Az1000).
- Перейти к условному форматированию.
- Нажмите Новое правило и выберите опцию Использовать формулу в каком формате.
- Напишите эту формулу.
= AND(($ A1 = 1), MOD(ROW($ A1), 20)= 0)
- Наконец выберите Цвет заливки и другие.
Примечание: значение 20 является номером строки, может быть заменено на другое по вашему усмотрению.
Далее рассказывается, как выделить выбранную строку или активную строку.
Выполните все четыре предыдущих шага и напишите эту формулу,
= ЯЧЕЙКА ("строка")= ROW ()
Закончите с выбором цветов и других.
И наконец, щелкните правой кнопкой мыши вкладку «Лист», нажмите «Просмотреть код» и напишите этот простой код.
Private Sub Worksheet_SelectionChange(ByVal Target As range)
Заявка.подсчитывать
End Sub
Надеюсь, это поможет вам. Оставьте свой комментарий.