在Microsoft Excel中取消配置{TAB}

时间:2017-05-18 10:18:53

标签: excel-vba vba excel

我目前正在创建一个包含VBA宏的Excel电子表格。问题是当我在这个单元格上按下ENTER或TAB时,我试图在单元格中强制执行特定的跳转。

我不知道发生了什么但是现在,每次按下TAB键时,Excel都会提示我一条消息,说明"无法找到宏Tab1:/ PathOfTheWorksheet!Tab1&# 34;

这是我尝试使用的代码,但消息仍在显示。

Sub auto_open()
        Application.OnKey "{TAB}", "Tab1"
End Sub
Sub auto_close()
    Application.OnKey "{TAB}"
End Sub
Sub Tab1()
    On Error Resume Next
    If ActiveSheet.Name = "Formulario" Then
'Según la celda actual (posición inicial) elige la celda destino (posición final)
        Select Case ActiveCell.Address(0, 0)
            Case "J11": [J26].Activate
            Case "J16": [J11].Activate
            Case "J21": [J16].Activate
            Case "J26": [J21].Activate
'Si no está en ninguna celda de interés,
'se ubica en la celda contigua (si no está en la última columna)
            Case Else: If ActiveCell.Column <> Cells.Columns.Count Then ActiveCell.Offset(0, 1).Activate
        End Select
'Si no está en la hoja de trabajo hace lo 'normal'
    Else: If ActiveCell.Column <> Cells.Columns.Count Then ActiveCell.Offset(0, 1).Activate
    End If
End Sub

Sub auto_open() Application.OnKey "{TAB}", "Tab1" End Sub Sub auto_close() Application.OnKey "{TAB}" End Sub Sub Tab1() On Error Resume Next If ActiveSheet.Name = "Formulario" Then 'Según la celda actual (posición inicial) elige la celda destino (posición final) Select Case ActiveCell.Address(0, 0) Case "J11": [J26].Activate Case "J16": [J11].Activate Case "J21": [J16].Activate Case "J26": [J21].Activate 'Si no está en ninguna celda de interés, 'se ubica en la celda contigua (si no está en la última columna) Case Else: If ActiveCell.Column <> Cells.Columns.Count Then ActiveCell.Offset(0, 1).Activate End Select 'Si no está en la hoja de trabajo hace lo 'normal' Else: If ActiveCell.Column <> Cells.Columns.Count Then ActiveCell.Offset(0, 1).Activate End If End Sub

1 个答案:

答案 0 :(得分:1)

您找到的解决方案非常巧妙,但我认为它可能不是您想要的。附带损害太多了。请在您的&#34; Formulario&#34;的代码表中安装以下代码。标签。如果它会让您失望,可以将其删除而不会对您的工作簿产生不良影响。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Const Clm As Long = 10              ' specifies column J
    Dim Respondents, Targets
    Dim R As Long

    Application.EnableEvents = False
    With Target
        If .Column = 10 Then
            ' match sequence of 'Respondents' and 'Targets'
            Respondents = Array(11, 16, 21, 26)
            Targets = Array(0, 26, 11, 16, 21)
            ' the leading 0 in 'Targets' is insignificant but necessary:
            ' MATCH will find row 11 in the first position of 'Respondents'
            ' which is Targets(1) [= 26]

            On Error GoTo NotApplicable
            R = Targets(WorksheetFunction.Match(.Row, Respondents, 0))
            Cells(R, Clm).Select
        End If

NotApplicable:
    End With
    Application.EnableEvents = True
End Sub

首先,此代码不会在您安装它的代码表中的任何工作表上运行,即#Formula;&#34; Formulario&#34;。其次,当您单击任何目标单元格(数组Targets)时,它将运行。第三,当你点击其他地方时,它不会采取任何行动,第四,它将允许你使用tab键用于其通常目的。