Любое предложение о том, как настроить выделение горизонтальной строки / окна, которое остается в той же фиксированной позиции на экране, пока я прокручиваю строки вверх и вниз? Я имею в виду своего рода горизонтальную панель замораживания, которая позволяет выделять строки, когда они проходят через них при прокрутке. Чтобы быть более понятным, скажем, что теперь у меня выделена строка 20. Если я прокручиваю вниз на 1 строку, теперь у меня выделена строка 21 и так далее. Например, если бы я поместил на монитор цветную прозрачную ленту, и строки подсвечиваются, когда они проходят под ним. Можно ли настроить макрос или код VBA для этого?

2 ответа2

0

Основной проблемой является обнаружение события прокрутки (подробности на 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, строки не будут выделены

Лист1

0

@ design95, по вашему желанию я хотел бы показать вам, как подсвечивать каждую 20-ю строку, считайте с 1-й строки.

Следуй этим шагам.

  1. Выберите диапазон данных, например (A1:Az1000).
  2. Перейти к условному форматированию.
  3. Нажмите Новое правило и выберите опцию Использовать формулу в каком формате.
  4. Напишите эту формулу.

= AND(($ A1 = 1), MOD(ROW($ A1), 20)= 0)

  1. Наконец выберите Цвет заливки и другие.

Примечание: значение 20 является номером строки, может быть заменено на другое по вашему усмотрению.

Далее рассказывается, как выделить выбранную строку или активную строку.

Выполните все четыре предыдущих шага и напишите эту формулу,

= ЯЧЕЙКА ("строка")= ROW ()

Закончите с выбором цветов и других.

И наконец, щелкните правой кнопкой мыши вкладку «Лист», нажмите «Просмотреть код» и напишите этот простой код.

Private Sub Worksheet_SelectionChange(ByVal Target As range)

Заявка.подсчитывать

End Sub

Надеюсь, это поможет вам. Оставьте свой комментарий.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .