2011-12-08 13 views
1

私はスプレッドシートを持っています。 私がしたいのは、データ入力時にタブがレコードの最後まで移動する、つまり18colです。それから、次の行の1列目に進みます。ユーザーがレコードの真ん中に行きたい場合は、許可されません。Excelスプレッドシートでタブオーダーを作成する方法

VBAが可能な場合は手伝ってください。

おかげ

答えて

2

だけで所望の範囲(18列)の外側を選択からユーザーを保つために必要がある場合は、あなたもVBAを必要としません。シート保護を使用し、ユーザーがロックされたセルを選択することを許可しない。 http://www.dummies.com/how-to/content/how-to-protect-cell-data-in-excel-2010.html

セルが順番に入力されるように強制する必要がある場合は、このVBAコードを追加する必要があります。 「前の」セルに値が設定されている場合は、イベントプロシージャを使用して「次の」セルのロックを解除します。そうでない場合は、現在のセルを前のセルに戻してユーザーが記入できるようにします。

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    Dim rngPrev As Range 
    Dim rngNext As Range 
    Const LAST_COL As Long = 18 

    Select Case Target.Column 
     Case Is = 1 
      If Target.Row > 1 Then 
       Set rngPrev = Target.Offset(-1, LAST_COL - 1) 
      Else 
       Set rngPrev = Target 
      End If 
      Set rngNext = Target.Offset(0, 1) 
     Case 2 To LAST_COL - 1 
      Set rngPrev = Target.Offset(0, -1) 
      Set rngNext = Target.Offset(0, 1) 
     Case 18 
      Set rngPrev = Target.Offset(0, -1) 
      Set rngNext = Target.Offset(1, 1 - LAST_COL) 
    End Select 
    If Not IsEmpty(rngPrev.Value) > 0 Then 
     Me.Unprotect 
     rngNext.Locked = False 
     ' note: this line is for testing purposes to show which cells get unlocked 
     rngNext.Interior.ColorIndex = 6 
     Me.Protect 
    Else 
     rngPrev.Activate 
    End If 
End Sub 
+0

ありがとうございました。それはうまく動作します。しかし第1列の始まりでそれは誤りを得る。私はそれを以前の値である空値に変更しました。いくつかの細胞が価値を持っていないことを認めてください。申し訳ありませんが、私はそれによく精通していません。助けてくれてありがとう – user1049518

+0

"以前の"セルのエラー値を処理するコードを修正しました。繰り返しますが、このコードは、すべてのセルを順番に取り込むように強制する場合にのみ必要です。それ以外の場合は、最初の提案(シートをロックし、ロックされたセルを選択することはできません)が必要です。 –

+0

レイチェルさん、本当にありがとうございました。 – user1049518

関連する問題