0

我有一个 Excel 订单表,其中包含 6 类要订购的设备。我正在尝试创建自定义选项卡顺序,以将活动单元格移动到适用于所选特定类型设备的下一列。例如,如果用户选择了我想从 E 列移动到 F 的单位,那么跳过 G、H 和 I 并直接移动到 K。之后我想移动到下一行的 E 列。我只希望此选项卡顺序应用于 B 列中有数字的行。

它的工作方式如下:

如果活动行的 b 列中的单元格 >=1 则

如果活动行的 e 列中的单元格为空白,则转到 e 列

如果活动行的 e 列中的单元格等于单元制表顺序 E、F、K、M,则下一行 E 否则,如果活动行的 e 列中的单元格等于椅子制表顺序 E、F、G、H, I,K,M 下一行 E

{ETC...}

我无法将该含义写入代码形式。

4

1 回答 1

0

好吧,如果我理解正确,你想用你自己的替换 tab 键的功能。为此,您要使用Application.OnKey.

一个简单的例子,在 VBA 编辑器中打开 Sheet1 并输入以下代码

Private Sub Worksheet_Activate()
    Application.OnKey "{TAB}", "TabIntercept"
End Sub

Private Sub Worksheet_Deactivate()
    Application.OnKey "{TAB}"
End Sub

然后插入一个模块并编写一个公共子,如:

Public Sub TabIntercept()
    ActiveCell.Offset(2).Activate
End Sub

现在在 Sheet1 上,选项卡将选择当前单元格下方的单元格 2,而不是像往常一样选择右侧的单元格 2。

当然,您可以使用 if 语句对此进行扩展。比如下面的例子,tab 的作用是正常的,除非你的光标在 Cell A2 并且 B2 的值为 5,在这种情况下它会跳转到 C3。

Public Sub TabIntercept()
    If Not Intersect(ActiveCell, Sheet1.[A2]) Is Nothing And Sheet1.[B2] = 5 Then
      Sheet1.[C3].Activate
    Else
      ActiveCell.Offset(0, 1).Activate
    End If
End Sub

作为旁注,如果您想支持 shift-tab 并向后循环您的自定义选择,您将需要编写第二个 sub 并添加另一个对该OnKey方法的调用。类似的东西Application.OnKey "+{TAB}", "ReverseTabIntercept"。加号表示 shift 键,您可以在此处的文档中看到

于 2013-08-20T15:30:43.693 回答