Автоматическое вкладывание между полями в книге Excel - PullRequest
0 голосов
/ 27 ноября 2018

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

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim tabArray As Variant
    Dim i As Long
     tabArray = Array("B5", "C6", "D7", "E8")
       Application.ScreenUpdating = False
         For i = LBound(tabArray) To UBound(tabArray)
    If tabArray(i) = Target.Address(0, 0) Then
        If i = UBound(tabArray) Then
            Me.Range(tabArray(LBound(tabArray))).Select
        Else
            Me.Range(tabArray(i + 1)).Select
        End If
    End If
  Next i
   Application.ScreenUpdating = True
End Sub

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

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018

Вы также можете просто защитить лист и разблокировать входные ячейки.

Щелкните правой кнопкой мыши на ячейке, выберите «Форматировать ячейки».Затем перейдите на вкладку «Защита» и снимите флажок «Заблокировано».

После разблокировки входных ячеек перейдите на ленту «Просмотр» и нажмите «Защитить лист».Снимите флажок «Выбрать заблокированные ячейки», и он должен позволять вам нажимать только на незаблокированные ячейки, а также может нажимать клавишу «Tab» для перехода к следующей доступной ячейке.

0 голосов
/ 27 ноября 2018

Защита листа и разблокировка ячеек ввода данных, как предлагает @Basher, вероятно, является лучшим решением IMO, но этот вид работы работает.Пара примечаний:

  1. Чтобы «взломать» последовательность вкладок, вам нужно выбрать одну из ячеек ввода данных
  2. «Разбить» последовательность вкладок (так что выВы можете выбрать другую ячейку, возможно) Вы можете выбрать несколько ячеек.

Код:

Dim lastCellAddress As String

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim tabArray As Variant
    Dim i As Long, addr, mCurr, indx, mPrev

    If Target.Cells.CountLarge = 1 Then

        tabArray = Array("B5", "C6", "D7", "E8")

        addr = Target.Address(False, False)
        mCurr = Application.Match(addr, tabArray, 0)

        If IsError(mCurr) Then 'current selection isn't a data entry cell
            If lastCellAddress <> "" Then
                'was user previously in a data entry cell?
                mPrev = Application.Match(lastCellAddress, tabArray, 0)
                If Not IsError(mPrev) Then
                    'mPrev is 1-based but tabArray is 0-based...
                    indx = IIf((mPrev - 1) < UBound(tabArray), mPrev, 0)
                    On Error GoTo haveError
                    Application.EnableEvents = False
                    Me.Range(tabArray(indx)).Select '<< select the next entry cell
                    Application.EnableEvents = True
                End If
            End If
        End If
        lastCellAddress = Selection.Address(False, False)
    Else
        lastCellAddress = ""  'breaks out of the sequence
    End If
    Exit Sub

haveError:
    Debug.Print Err.Description
    Application.EnableEvents = True

End Sub
0 голосов
/ 27 ноября 2018

Вам не нужен VBA для выполнения этой задачи - это встроенная функция Excel.

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

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