我目前正在创建一个包含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
答案 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键用于其通常目的。