2015-11-18 4 views
0

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

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

Я думал, что это довольно легко сделать, но я не помню, как это сделать. Единственный вариант, который я могу найти, это параметр «Замораживание панорамирования», но это замерзает все, и я только хочу, чтобы он замерзал, когда строка заголовка находится наверху.

Возможно ли это?

Отредактировано. Чтобы добавить немного больше пояснений, параметр замораживания окон заморозит все выше выбранной строки (если только я не пропустил ее), что не то, что я ищу. Я хочу, чтобы лист работал так же, как на веб-сайте, где наверху может быть рекламный баннер, а затем панель навигации/логотип/и т. Д., А затем содержимое. Когда вы прокручиваете вниз, рекламный баннер выходит из поля зрения, но когда панель навигации находится наверху, она останавливается и остается в поле зрения, пока контент продолжает прокручиваться.

Предположим, у меня есть первые 5 строк, у которых есть ячейки для захвата входных значений. Затем строка 6 является заголовком таблицы, а строки 7-100 являются данными таблицы. Я хочу, чтобы пользователь мог нажать кнопку прокрутки вниз 5 раз, чтобы перейти от входных значений. Затем я хочу, чтобы строка 6 замерзла вверху, так что, когда пользователь продолжает прокрутку, заголовок таблицы отображается. И наоборот, когда пользователь прокручивается вверх, строка 6 остается наверху, пока пользователь не дойдет до строки 7, а затем, если они продолжат прокрутку, входные значения перемещаются в режим просмотра.

Excel делает что-то подобное, если вы используете функцию «формат как таблица» и указываете, что выбор имеет строку заголовка. Затем при прокрутке заголовки столбцов заменят метки адресов «A», «B», «C» и т. Д. Это не будет работать напрямую для меня, потому что структура таблицы немного сложнее.

+0

См. [Здесь] (http://stackoverflow.com/questions/3232920/how-can-i-programmatically-freeze-the-top-row-of-an-excel-worksheet-in-excel-200) , –

+0

не уверен, почему вы добавили vba, а ответы также предлагают вариант vba. просто выберите строку/colum (один или оба), а затем параметры freeze panes – davejal

+0

Спасибо Скотту, но из того, что я могу сказать, этот поток обеспечивает решение для замораживания строки, но не динамически. Я обновил сообщение с дополнительной информацией, и в этом примере я хочу, чтобы строка 6 зависала, когда она является верхней строкой листа. Я все еще новичок в VBA, и я полагаю, что могу написать чек, чтобы увидеть, является ли строка 6 первой строкой, а затем использовать код замораживания из другого потока, но это кажется неэффективным. – Brian

ответ

0

Насколько я понял, вы хотите сохранить видимые строки или столбцы, которые не являются первыми. Это своего рода экзотика.

Если вы хотите скрыть configureables, чтобы сохранить визуальное пространство и сохранить заголовки во все времена:

Просто заморозить столько строк/столбцов, сколько необходимо для обеих ваших конфигов и заголовков. А затем СКРЫТЬ строки/столбцы, которые вы не хотите всегда видеть.

Вы даже можете иметь простую кнопку, которая делает это Скрытие и отображение с помощью одного клика:

Sub transaction1() 
    Rows("10:50").Hidden = Not Rows("10:50").Hidden 
End Sub 

Что касается замораживания стекол, в случае, если кто-то не знает, вы можете заморозить столько, сколько вы хотите. Если вы хотите заморозить столбцы A и B, а строки 1 и 2 просто нажмите C3, а затем используйте функцию замораживания. Если вы хотите заморозить только 10 строк - щелкните по A11, а затем используйте замораживание.

Хотя я обычно просто разгрузить мое место службы в другом месте и быстро перейти к и от нее с = HYPERLINK()

В любом случае ваш искомый результат не какой-либо более удобным, чем другие способы вы можете достичь НАВИГАЦИОННЫЙ легкость. Поэтому, если я прокрутил до строки 14000, если я хочу прокрутить назад до начала, чтобы просмотреть мои настройки, мне все равно придется проходить через строки 14k. Быстрое перемещение области сохранения, а также заголовков быстрее. И если ваша область настроек занимает столько места, переместите ее и создайте для нее более компактные навигационные системы или просто спрячьте/покажите ее по требованию.

Нет сомнений, что у вас могут быть еще более экзотические способы достижения эффекта, но обязательно ли это так?

+0

Спасибо, Елена! Ваш ответ дал мне другую точку зрения, о которой я не думал. Ответ Jeeped выше - это то, что я имел (в основном), но вы придумали, что нужно прокручивать назад, чтобы увидеть настройки. У меня также есть кнопки, которые будут полезны, чтобы иметь возможность видеть активную строку и кнопку одновременно, поэтому ваше решение использовать кнопку, чтобы скрыть область настроек/кнопок, является лучшим дизайном. Спасибо!!! – Brian

+0

Существует еще большее преимущество для замороженной навигации. Если у вас есть первые 10 строк заморожены и прокручиваются до строки 10000, нажмите гиперссылку в замороженном A3, которая приведет вас к другому листу. KEEPS ваша позиция прокрутки, когда вы вернетесь на строку 10000. Гиперссылка Nav действительно хороша. У меня есть целая страница концентратора. – helena4

0

Используйте это на кодовой странице рабочего листа (вкладка имени рабочего листа правой кнопкой мыши, вид кода).

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    Dim iVISROWS As Long 
    Dim iHDRROWS As Long 
    iVISROWS = 5 
    iHDRROWS = 3 
    Cells(1, 1).Resize(iHDRROWS, 1).EntireRow.Hidden = _ 
     Target(Target.Rows.Count).Row > iVISROWS 
End Sub 

Необязательно, вынуть декларацию и назначение iVISROWS и iHDRROWS и из следующих действий в области декларации (сверху) модуля кода листа.

Option Explicit 

Public Const iVISROWS As Long = 5 
Public Const iHDRROWS As Long = 3 

Play с количеством строк заголовка (iHDRROWS) и в нижней части текущего выделения, триггерами скрывающей строки заголовка (iVISROWS) untilo вы получите результаты, которые вы ищете.

+0

Спасибо, Jeeped! Это почти то, что я искал. Замораживая строку заголовка и добавляя код, он достигает желаемого результата с единственной оговоркой, что активная ячейка должна быть ниже iVISROWS, то есть стрелки вверх/вниз работают отлично, но не полоса прокрутки/кнопок. Хороший материал, и я буду продолжать играть с ним. – Brian

0

У меня была такая же проблема, и у меня было гораздо меньше технических навыков, чтобы сделать все кодирование выше. Мое обходное решение очень простое. Вставьте новый ряд справа вверху листа. Скопируйте заголовки таблицы в новую строку 1, а затем заморозите верхний ряд как обычно. Когда вы прокручиваете верхний манекен, он остается над вашим столом, а остальное исчезает. Ваши исходные заголовки по-прежнему остаются на месте для фильтрации при необходимости, если вы прокрутите вверх.

Смежные вопросы