0

注文する機器の 6 つのカテゴリを含む Excel の注文フォームがあります。選択した特定のタイプの機器に適用される次の列にアクティブなセルを移動するカスタム タブ オーダーを作成しようとしています。たとえば、ユーザーが列 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

{等...}

その意味をコード形式に書くのに苦労しています。

4

1 に答える 1

0

さて、私が正しく理解していれば、タブキーの機能を独自のものに置き換えたいと思うでしょう。そのためには、 を使用します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 つ下のセルを選択します。

もちろん、これを if ステートメントで拡張できます。次の例のように、セル 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 をサポートしてカスタム選択を逆方向に循環させたい場合は、2 つ目のサブルーチンを作成し、OnKeyメソッドに別の呼び出しを追加する必要があります。のようなものApplication.OnKey "+{TAB}", "ReverseTabIntercept"。プラス記号は、こちらのドキュメントで確認できるようにシフト キーを示します。

于 2013-08-20T15:30:43.693 に答える