Настройте поток курсора / направление при нажатии клавиши ввода в таблице Excel / сетке таблицы с помощью Excel VBA - PullRequest
0 голосов
/ 08 августа 2010

У меня есть следующий столбец:

Column A---------------Column B
100 ----------------- 500
200 ----------------- 600
AA ----------------- ABCD
BB ----------------- DEFG
CC ----------------- FF
DD ----------------- GG
EE -----------------II
300 ----------------- 700
400 ----------------- 800

Я хочу, чтобы курсор находился в ячейке «AA» во все времена, когда рабочая таблица открыта, и когда она достигает «DD», она должна перейти в «ABCD» вместо перехода в ячейку 300.

Это упрощенная версия более крупной проблемы. У меня есть несколько столбцов. Мне нужен динамический код Visual Basic вместо того, чтобы жестко повторять его.

1 Ответ

0 голосов
/ 06 ноября 2010

Подсказка - это использование событий листа:

  • Нажмите Ctrl + R (Project Explorer) и щелкните по листу, чтобы отобразить код листа.
  • Выберите правильное событие (Activate или Selection_Change) в правом верхнем поле со списком
  • Поместите код между Private sub .... End Sub внутри события
  • Поместите объявление переменной отдельно перед событиемкоды.

Код показан ниже

Option Explicit
Const LBeg = 5  ' Line and column top left edit area
Const CBeg = 1
Const LEnd = 8  ' Line and column bottom right edit area
Const CEnd = 2
Public LCurr As Long
Public CCurr As Integer

' In every worksheet activation
Private Sub Worksheet_Activate()
Application.EnableEvents = False
LCurr = LBeg   ' goes to top left cell
CCurr = CBeg
Cells(LBeg, CBeg).Select
Application.EnableEvents = True
End Sub

' In every change of selection inside this worksheet
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.EnableEvents = False

'*****************************************************
' When current cell reach last edit line,
' goes to first line of edit area in the next column.
' When reach last column edit area resumes to
' first column in edit area
'*****************************************************

If LCurr = LEnd Then
  If CCurr < CEnd Then
    LCurr = LBeg
    CCurr = CCurr + 1
  Else
    LCurr = LBeg
    CCurr = CBeg
  End If
  Cells(LCurr, CCurr).Select
End If

LCurr = Target.Row
CCurr = Target.Column
Application.EnableEvents = True
End Sub
...