Как завершить VBA на указанном c столбце листа? - PullRequest
0 голосов
/ 06 января 2020

После запуска макроса я хочу, чтобы экран находился в указанном столбце c электронной таблицы, чтобы я мог проверить правильность ввода данных.

Я решил, как активировать указатель c лист.

Я пробовал это

Cells(ActiveCell.Column, "BW").Activate

Он выбирает первую строку столбца, но не перемещает экран, чтобы отобразить выбор.

Ответы [ 2 ]

1 голос
/ 06 января 2020

"Но он просто выбирает первую строку столбца, а не перемещает экран для отображения выбора ... "

Выбирает первый столбец дальность цели, центрируясь на дальности. Не обрабатывает замороженные панели.

В модуле

Public Sub SelectColumnAndViewActive(cellrange As Range)
  Dim cellrangerow As Long
    cellrangerow = cellrange.Row
    cellrange.EntireColumn.Select
    ActiveWindow.SmallScroll WorksheetFunction.Max(cellrangerow - 1 - Int(ActiveWindow.VisibleRange.Rows.Count / 2)), 0, 0, 0
End Sub

Использование

Call SelectColumnAndViewActive(ActiveCell)

Объяснение

Сначала мы сохраняем номер строки активной ячейки, поскольку она будет потеряна после выбора столбца. Затем мы выбираем первый столбец активной ячейки. Последний автоматически поместит первую строку листа в верхнюю часть активного окна, поэтому нам нужно прокрутить определенное количество строк, чтобы центрировать то, что изначально было активной ячейкой на последнем шаге.

Выбирает только целевой диапазон, центрируясь на нем. Работает ли с замороженными стеклами и прерывистыми диапазонами.

В модуле

Public Sub CenterRange(cellrange As Range)
  Dim cellitems() As String, tlrcitems() As String, brrcitems() As String, minrow As Long, mincol As Long, maxrow As Long, maxcol As Long
    If cellrange Is Nothing Then Exit Sub
    For Each area In cellrange.Areas
        cellitems = Split(area.Address(ReferenceStyle:=xlR1C1), ":")
        tlrcitems = Split(Mid$(cellitems(0), 2), "C")
        If UBound(cellitems) = 1 Then brrcitems = Split(Mid$(cellitems(1), 2), "C") Else brrcitems = tlrcitems
        If minrow = 0 Then minrow = tlrcitems(0) Else minrow = WorksheetFunction.Min(minrow, CLng(tlrcitems(0)))
        If mincol = 0 Then mincol = tlrcitems(1) Else mincol = WorksheetFunction.Min(mincol, CLng(tlrcitems(1)))
        If maxrow = 0 Then maxrow = brrcitems(0) Else maxrow = WorksheetFunction.Max(maxrow, CLng(brrcitems(0)))
        If maxcol = 0 Then maxcol = brrcitems(1) Else maxcol = WorksheetFunction.Max(maxcol, CLng(brrcitems(1)))
    Next
    ActiveWindow.ScrollRow = WorksheetFunction.Max(minrow - (ActiveWindow.VisibleRange.Rows.Count - (maxrow - minrow + 1)) \ 2, 1)
    ActiveWindow.ScrollColumn = WorksheetFunction.Max(mincol - (ActiveWindow.VisibleRange.Columns.Count - (maxcol - mincol + 1)) \ 2, 1)
    cellrange.Select
End Sub

Использование

Call CenterRange(ActiveCell)

Объяснение

Сначала мы отбрасываем пустые целевые диапазоны. Затем мы перебираем все области прерывистого целевого диапазона, получаем их адреса в формате R1C1 (например, R5C3 для строки 5 и столбца 3), чтобы найти минимальные и максимальные «границы» всего диапазона. Наконец, мы концентрируемся на диапазоне, устанавливая значения для первой строки и первого столбца активного окна равными вычисленным значениям, а затем выбираем целевой диапазон.


Возможно, вы заинтересованы в Первая часть ответа. Конечно, вы можете заменить ActiveCell любым другим диапазоном, который вам нравится при вызове сабов.

РЕДАКТИРОВАТЬ: Я писал это, когда вы приняли ответ. Я решил опубликовать его в любом случае, так как он также центрируется на соответствующей строке после выбора столбца, и есть также часть, которая может вас заинтересовать, если по какой-то причине ваш диапазон будет прерывистым. И да, я тоже попробовал Application.GoTo, когда столкнулся с этой проблемой, и быстро заметил ее ограничения.

1 голос
/ 06 января 2020
Application.Goto Range("A:A"), Scroll:=True

Измените "A: A" на нужные столбцы.

Благодаря ответу Lumigraphics Расположение дисплея Excel с использованием VBA

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...