Как ограничить Ctrl + End в листе Excel - PullRequest
0 голосов
/ 05 сентября 2011

У меня есть некоторые данные, вставленные в строки 500 - 503. Я намеренно поместил данные в эти строки, потому что эти строки будут использоваться в макросах, а не для просмотра пользователем.Данные, относящиеся к пользователю, заканчиваются в строке 100.

Я скрыл строки 500 - 503, но после нажатия Ctrl + End курсор перемещается в строку 499.

Мое требование послепри нажатии Ctrl + End курсор должен быть в последней ячейке строки 100.

Итак, как мне это сделать?

РЕДАКТИРОВАТЬ: Спасибо за все ответы.Многие посоветовали мне иметь другой лист для данных, не связанных с пользователем, но я не могу его получить.Кроме того, я не должен иметь сценарии VBA. (Должен был дать вам эти условия раньше ... мой плохой!)

Ответы [ 4 ]

11 голосов
/ 05 сентября 2011

Эта проблема будет устранена с лучшей изоляцией.

То есть рабочие листы, предназначенные для использования пользователем, должны ограничиваться только элементами, необходимыми для пользовательского интерфейса. В этом случае только те строки, которые должен видеть пользователь.

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

5 голосов
/ 05 сентября 2011

Конкретный ответ на ваш вопрос, конечно, таков: перехватите использование клавиши Ctrl-END.

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

Private Sub Worksheet_Activate()
    Application.OnKey "^{END}", "SuppressMe"
End Sub

Private Sub Worksheet_Deactivate()
    Application.OnKey "^{END}", ""
End Sub

и другой модуль, содержащий

Sub SuppressMe()
    ' you can be very creative here about line 100 or not 100
    MsgBox "Co-Cooooo :-P"
End Sub

Другим милым способом удовлетворения описанных вами требований и устранения необходимости наблюдения и подавления клавиш было бы ограничение навигации до строки 100. Теперь Ctrl-END поместит пользователя в крайний правый столбец строки 100, а Ctrl-DOWN будет также покрыт. На самом деле пользователь просто не может пройти мимо строки 100

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Row > 100 Then
        Me.Cells(100, Target.Column).Select
    End If
End Sub

но .... подождите !!! неужели нет пути? ... конечно, пользователь все еще может ПРОКРУТАТЬ мимо ряда 100 и обнаружить ваше маленькое пасхальное яйцо ряда-500. Поэтому я согласен на 100% с более ранними предложениями о другой стратегии, потому что

  • пользователь, узнавший, что именно строка 500 - 503 скрыта, может очень сильно удивиться, почему
  • Ctrl-END - не единственный способ, которым пользователь может перемещаться после 100 строки - вам нужно подавить END-DOWN (комбинация из 2 клавиш ... вам нужно буферизовать END и спросить следующую клавишу: вы ВНИЗ ... веселиться!)
  • и вы тратите место на диске, чтобы сохранить лист с таким количеством пустых строк только для этой строки 500

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

3 голосов
/ 05 сентября 2011

Как говорили другие, определенно лучше разделить ваши данные, не относящиеся к пользователям, на другой лист.

Тем не менее, одну вещь, которую вы могли бы сделать, это защитить свой лист и запретить доступ к заблокированным ячейкам, оставив только те ячейки, в которые пользователь должен ввести что-то разблокированное.

Это не позволяет Ctrl End вообще что-либо делать: он не может перейти к последней ячейке, поскольку он заблокирован, поэтому он ничего не делает. (Проверено в Excel 2007)

Но опять же, вам, вероятно, будет лучше, если вы разделите пользовательские и непользовательские данные на разных листах.

3 голосов
/ 05 сентября 2011

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

  • Поместите свои скрытые данные на другой лист той же книги. Это действительно самый чистый способ работы.
  • В качестве альтернативы, используйте Ctrl Стрелка вниз или Конец Стрелка вниз вместо Ctrl Конец .
...